进阶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();
  }
})
//一个回到顶部的简易代码
顶部

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( "

Test

" ); $( "

Test

" ).appendTo( ".inner" ); //.inner内部头部添加内容 $( ".inner" ).prepend( "

Test

" ); $( "

Test

" ).prependTo( ".inner" ); //与.inner同级,在.inner之前插入内容 $( ".inner" ).before( "

Test

" ); $("

Test

").insertBefore($(".inner")); //与.inner同级,在.inner之后插入内容 $( ".inner" ).after( "

Test

" ); $( "

Test

" ).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( "

Test

" ); $( ".inner" ).remove( "

Hello

" );

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的有无
Some text.
//第一次执行 $( "div.tumble" ).toggleClass( "bounce" )
Some text.
//第二次执行 $( "div.tumble" ).toggleClass( "bounce" )
Some text.

9.
导航

10.

Tab切换

11.

添加元素

你可能感兴趣的:(进阶14-jQuery选择器)