进阶14-jQuery选择器

1. 说说库和框架的区别?

库的英语为 Library ( 简写 Lib ),框架的英语为 Framework。

库是一个一个封装好的代码,你需要哪个就调用哪个就可以了,使用的只是其中一部分,有面向对象的类库,有面向过程的函数库。优点:使用灵活,任意组装;缺点:需要自己搭建方案,建立各个部分的联系,过程相对繁琐,出现问题的几率高,耗时。

框架是一整套解决某个问题的系统化方案,你必须使用整个框架里规定的代码。优点:统一规范方便;缺点:难以自定义其中的某个部件

2.jquery 能做什么?

1.选取DOM元素
jQuery的核心是通过各种选择器,选中DOM元素,可以用querySelectorAll方法模拟这个功能。

  //简单例举基本选择器
$('\*')    //匹配所有
$('#id')    //id选择器
$('.class')    //类选择器
$('element')    //标签选择器

2.DOM操作
尾部追加DOM元素

// jQuery写法
$(parent).append($(child));
//DOM写法
parent.appendChild

头部插入DOM元素

//jQuery写法
$(parent).prepend($(child));
//DOM写法
parent.indertBefore(child,parent.childNode[0])

删除DOM

//jQuery写法
$(child).remove()
//DOM写法
child.parentNode.removeChild(child)

3.事件的监听

//jQuery写法        //DOM写法
Element.prototype.on = Element.protype.addEventListener;

4.事件的触发

Element.protype.trigger = function (type, data){
var event = document.createEvent('HTMLEvents');
event.initEvent(type, true, true);
event.data = data || {};
event.eventName = type;
event.target = this;
this.dispatchEvent(event);
return this;
};

5.document.ready

目前的最佳实践,是将JavaScript脚本文件都放在页面底部加载。这样的话,其实document.ready方法(jQuery简写为$(function))已经不必要了,因为等到运行的时候,DOM对象已经生成了。

6.atter方法

//jQuery方法
$("#picture").attr("src", "http://url/to/image");
//DOM方法
$("#picture").src = "http://url/to/image";

7.addClass方法

//jQuery方法
$('body').addClass('hasJS');
//DOM方法
document.body.className = 'hasJs';
// or
document.body.className += 'hasJS';

8.CSS

//jQuery方法
$(node).css("color", red)
//DOM方法
element.style.color = "red";
// or
element.style.cssText += 'color:red';

9.数据储存

//jQuery方法
$("body").data("foo", 52);
//DOM方法
element.dataset.user = JSON.stringify(user);
element.dataset.score = score;

10.Ajax

//jQuery方法
$.ajax({
type: "post",
url: "some.php",
data: {
name: "John", location: "Boston"
}
}).done(function(msg){
alert("Data Saved: " + msg);
})

//DOM方法
function request(type, url, opts, callback) {
    var xhr = new XMLHttpRequest();
    if (typeof opts === 'function') {
      callback = opts;
      opts = null;
    }
    xhr.open(type, url);
    var fd = new FormData();
    if (type === 'POST' && opts) {
      for (var key in opts) {
        fd.append(key, JSON.stringify(opts[key]));
      }
    }
    xhr.onload = function () {
      callback(JSON.parse(xhr.response));
    };
    xhr.send(opts ? fd : null);
  }

//基于request函数,模拟jQuery的get和post方法
var get = request.bind(this, 'GET');
var post = request.bind(this, 'POST');

11.动画

//jQuery方法
$foo.animation('slow', { x : '+=10px'});

jQuery的动画效果,很大部分基于DOM。但是目前,CSS 3的动画远比DOM强大,所以可以把动画效果写进CSS,然后通过操作DOM元素的class,来展示动画。

//DOM方法
foo.classList.add('animate');
//使用回调函数
el.addEventListener("webkitTransitionEnd", transitionEnded);
el.addEventListener("transitionend", transitionEnded);

12.替代方案
由于jQuery体积过大,替代方案层出不穷。
其中,最有名的是zepto.js。它的设计目标是以最小的体积,做到最大兼容jQuery的API。zepto.js 1.0版的原始大小是55KB,优化后是29KB,gzip压缩后为10KB。

3.jquery 对象和 DOM 原生对象有什么区别?如何转化?

联系:
jQuery对象是通过包装DOM原生对象生成的对象。
两者之间可以互相转换。

区别:
jQuery与原生JS取得的对象不同,两者不等价。
jQuery与DOM对象各自的方法不能互用,会报错

相互转换:
1.jQuery对象转换成DOM对象

//[index],转换单个jQuery对象
var $box = $('.box')     //jQuery对象
var box = $('.box')[0]     //DOM对象

<----------------------------------------------->

//.get(index),不添加index可以将结果集全部转换
var $box = $('.box')     //jQuery对象
var box = $box.get(0)    //DOM对象

2.DOM对象转换成jQuery对象

//用$()将DOM对象装起来
var box = document.querySelector('.box')    //DOM对象
var $box = $(box)    //jQuery对象

4.jquery中如何绑定事件?bind、unbind、delegate、live、on、off都有什么作用?推荐使用哪种?使用on绑定事件使用事件代理的写法?

绑定事件

// 推荐用法on,还可用bind
$('div').on('click', function(e){
    console.log(this);
    console.log(e);
});

bind、unbind、delegate、live、on、off都是操作事件的方法

//bind方法,添加点击事件,3.0已弃用
$( "table" ).bind( "click",  function() {
  $( this ).toggleClass( "chosen" );
});

//delegate方法,添加点击事件
$( "table" ).delegate( "td", "click", function() {
  $( this ).toggleClass( "chosen" );
});

//等同于这个on方法
$( "table" ).on( "click", "td", function() {
  $( this ).toggleClass( "chosen" );
});

//unbind off都是取消事件
<-------------------------------------->

var foo = function() {
  // Code to handle some kind of event
};

//给$("p")添加点击事件,每当点击的时候触发foo这个函数
$( "p" ).live( "click", foo );

//给$("p")添加点击事件,每当点击的时候取消触发foo这个函数
$( "p" ).die( "click", foo );

事件代理

/* 
 * 事件委托或者事件代理
 * 想让div下面所有的span绑定事件
 * 可以把事件绑定到div上
 */
$('div').on('click', 'span', function(e){
    console.log(this);
    console.log(e);
});

5.jquery 如何展示/隐藏元素?

.div {
//...
  display: none;
}
.active{
  display: block;
}

//通过添加删除class
$('.btn').on('click', function(){
  $('.div').addClass('active')
  $('.div').removeClass('active')
})

//通过判断class的有无,有就去掉,没有就加上
$('.btn').on('click', function(){
  $('.div').toggleClass('active')
})

<------------------------------------>

//动画效果,hide()和show(),fadeIn()和fadeOut(),slideUp()和slideDown()
$('.btn1').on('click', function(){
  $('.div').hide();
 // $('.div').fadeIn();
 // $('.div').slideUp();
})
$('.btn2').on('click', function(){
  $('.div').show();
 //$('.div').fadeOut();
// $('.div').slideDown();
})

//动画效果,toggle(),fadeToggle(),slideToggle()
$('.btn3').on('click', function(){
  $('.div').toggle();
  //$('.div').fadeToggle();
  //$('.div').slideToggle();
})

//动画效果,非toggle()
$('.btn4').on('click', function(){
  if($('.div').css('display', 'none'){
    $('.div').show()
    //$('.div').fadeOut()
    // $('.div').slideDown();
  })else{
    $('.div').hide()
    //$('.div').fadeIn()
    // $('.div').slideUp();
  }
})
//一个回到顶部的简易代码
<div class="go-top">顶部</div>
<style>
  .go-top{
    position: fixed;
    right: 10px;
    bottom: 10px;
    width: 60px;
    height: 100px;
    color: #fff;
    background-color: #6ff;
    display: none;
  }
</style>
<script>
  
  $(window).on('scroll', function(){
    var top = $(window).scrollTop()
    if(top>100){
      $('.go-top').css('display', 'block');
    }else{
      $('.go-top').css('display', 'none');
    }
  })
  $(window).on('click', function(){
     $(window).scrollTop(0)
   })
</script>

6. jquery 动画如何使用?

简而言之,服从正交原则,使用jQuery时,不去干扰HTML和CSS
推荐使用增加或者去除class的方法给DOM添加动画效果

当需要自定义动画时,可以使用animate

$('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
  }, 5000, function() {
    // Animation complete.
  });

7.如何设置和获取元素内部 HTML 内容?如何设置和获取元素内部文本?

获取HTML内容

$('.box').children('li')
$('.box').find('.box>li')
$('.box').html()

设置HTML内容

增:
//.inner内部末尾添加内容
$( ".inner" ).append( "<p>Test</p>" );
$( "<p>Test</p>" ).appendTo( ".inner" );

//.inner内部头部添加内容
$( ".inner" ).prepend( "<p>Test</p>" );
$( "<p>Test</p>" ).prependTo( ".inner" );

//与.inner同级,在.inner之前插入内容
$( ".inner" ).before( "<p>Test</p>" );
$("<p>Test</p>").insertBefore($(".inner"));

//与.inner同级,在.inner之后插入内容
$( ".inner" ).after( "<p>Test</p>" );
$( "<p>Test</p>" ).insertAfter( ".inner" );

<---------------------------------------------------------->

删:
//删除.test的所有子元素包括.test本身
//再次添加该元素时,绑定在元素上的事件无效
$('div').remove('.test');

//删除body的所有子元素
$('body').empty();

//删除.test的所有子元素包括.test本身
//再次添加该元素时,绑定在元素上的事件有效
$('div').detach('.test');

获取元素内部文本

$('div').text()

设置元素内部文本

$('div').html('123')
$('div').text('123')
<------------------------------->
$( ".inner" ).append( "<p>Test</p>" );
$( ".inner" ).remove( "<p>Hello</p>" );

8.如何设置和获取表单用户输入或者选择的内容?如何设置和获取元素属性?

获取表单用户的value

$('input').val()

设置表单用户的value

$('input').val('newValue');

获取元素的属性

var title = $( "em" ).attr( "title" );

设置元素的属性
attr方法

//改变指定属性的value
$( "#greatphoto" ).attr( "alt", "Beijing Brush Seller" );

//给匹配的所有元素移除指定的属性
$('div').removeAttr('id');

class方法

//添加class,不会覆盖,不会重复
$( "p" ).addClass( "myClass yourClass" );

//移除元素单个/多个/所有class
$( "p" ).removeClass( "myClass yourClass" );

//检查元素是否包含某个class,返回true/false
$( "#mydiv" ).hasClass( "foo" )

  <------------------------------------->

//切换元素的class的有无
<div class="tumble">Some text.</div>

//第一次执行
$( "div.tumble" ).toggleClass( "bounce" )
<div class="tumble bounce">Some text.</div>

//第二次执行
$( "div.tumble" ).toggleClass( "bounce" )
<div class="tumble">Some text.</div>

9.
导航

10.

Tab切换

11.

添加元素

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容