jQuery是一个小巧的,快速的,功能强大的JavaScript库。它通过一些易用的API简化了许多事情,例如:DOM操作、事件监听、动画、AJAX等等。
jQuery能做的事情,原生JS都能做到,只不过原生JS会更加繁琐,而化繁为简正是jQuery的目的所在。
write less,do more.

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

假设这么一个HTML片段

<button id="btn1"></button>

我们可以通过jQuery方法或原生DOM方法获取到这个元素节点

$("#btn1"); //jQuesy方法;document.querySelector("#btn1"); //原生DOM方法;

通过这两种方法获得的元素对象是两个完全不一样的对象。
jQuesy方法获取的称为jQuesy对象,它是一个类数组对象,它有它自己的方法,不能使用原生DOM方法;
原生DOM方法获取的称为DOM原生对象,它也有它自己的方法,不能使用jQuery的方法;

两种对象之间可以相互转换

$("#btn1")[0]; //jQuery对象转为原生DOM对象,用索引获取到对应的元素对象;$(document.querySelector("#btn1")); //DOM元素对象用$包裹,就得到jQuery对象;

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

在jQuery中,我们可以使用on()方法绑定事件

$("#btn1").on("click",function() { //最简单的事件绑定; console.log("hello world"); })

其他的事件绑定方法
bind(),该方法在3.0以后的版本已经被弃用,用on()代替;
1.4.3版本,其接受这么几个参数:eventType(事件类型,"click"等)、eventData(传递给事件处理函数的数据)、handler(事件处理函数)、preventBubble(一个Boolean,防止默认事件,阻止事件冒泡)
由于其只能绑定在已有元素中,新添加的元素不会绑定事件,不够灵活,已弃用;

unbind(),该方法可以移除bind()方法绑定的事件,不传递参数的情况下,将删除所有的事件,传递参数可以删除指定的事件和事件处理函数

delegate()方法是1.7版本以前常用的事件代理方法,现已被on()取代。接受这么几个参数:
selector:选择器字符串,用于过滤触发事件的元素
evenType:事件类型,多个用空格隔开
eventData:传递给事件处理程序的数据
handler:事件处理程序

live()也是一种事件代理的方法,附加一个事件处理程序到选择器匹配的所有元素,但是它把事件直接绑定在document上,通过相关参数来确定是否触发事件
events:事件类型
data:传递给事件处理程序的数据
handler:事件处理程序
因为live()是把事件绑定到document上的,导致冒泡链过长,以被弃用。

on()是现在绑定事件的常用方法,接受这么几个参数
1.events:一个或多个空格分隔的事件类型和可选的命名空间,或仅仅是命名空间,比如"click", "keydown.myPlugin", 或者 ".myPlugin";
2.selector:一个选择器字符串,用于过滤出被选中的元素中能触发事件的后代元素。如果选择器是 null 或者忽略了该选择器,那么被选中的元素总是能触发事件;
3.data:当一个事件被触发时,要传递给事件处理函数的event.data;
4.handler(eventObject):事件被触发时,执行的函数。若该函数只是要执行returnfalse的话,那么该参数位置可以直接简写成false

off()方法可以移除on()方法绑定的事件,不传递参数的情况下,将删除所有的事件,传递参数可以删除指定的事件和事件处理函数

jQuery事件代理写法
假设HTML片段

<ul id="container"> <li>content1</li> <li>content2</li> <li>content3</li></ul>

我们可以使用on()方法,并提供相关参数,就可以完成事件代理

//将事件绑定在父容器上,只有满足过滤选择器的的子元素才能触发事件$("#container").on("click","li",function() { //do something..})

jQuery 如何展示/隐藏元素?

jQuery中通过hide()方法隐藏元素,其接受三个参数:
[duration]:动画持续多久
[easing]:表示过渡使用哪种缓动函数,jQuery自身提供"linear" 和 "swing"
[complete]:在动画完成时执行的函数
不添加参数时,其方法等同于直接设置元素的display为none
通过添加参数,该方法可以实现一个渐变的隐藏元素的效果

$(element).hide() -------- $(element).hide(3000,function() { alert("hello world") })

同样,jQuery中使用show()方法来展示隐藏的元素,使用方法与hide()相同

jQuery动画如何使用?

jQuery中通过hide()方法隐藏元素,其接受三个参数
[duration]:动画持续多久
[easing]:表示过渡使用哪种缓动函数,jQuery自身提供"linear" 和 "swing"
[complete]:在动画完成时执行的函数
不添加参数时,其方法等同于直接设置元素的display为none
通过添加参数,该方法可以实现一个渐变的隐藏元素的效果

$(element).hide() -------- $(element).hide(3000,function() { alert("hello world") })

同样,jQuery中使用show()方法来展示隐藏的元素,使用方法与hide()相同
hide()方法会把元素的display变为none,show()方法会还原元素的display
toggle()方法用于切换元素的隐藏/显示,参数与hide()``show()相同,它的机制就是元素如果是隐藏的,就显示该元素,如果元素是显示的,就隐藏该元素,来回切换

fadeIn()/fadeOut用调整元素透明度的方法来显示/隐藏元素,一旦透明度变为0,display将设置为none,接受参数与hide()、show()相同
不设置参数,fadeIn()/fadeOut默认会有渐进显示/隐藏的效果

$(element).fadeIn()
$(element).fadeOut()

fadeTo以动画的形式调整元素到指定的透明度,接受这几个参数:
duration, opacity [, easing ] [, complete ]
opacity为指定变化的透明度
当opacity为0时,fadeTo方法不会使元素display为none

$(element).fadeTo(1000,0.5) //在1s内透明度变化到0.5

fadeToggle会通过改变透明度的方式显示和隐藏元素,如果元素是隐藏的,则显示,显示的,则隐藏,参数与fadeIn()``fadeOut()相同
fadeToggle在元素透明度为0时,会display为none

fadeIn()/fadeOut和show()/hide()的区别:
前者通过调整元素透明度实现元素隐藏和显示,透明度为0时设置display为none。后者通过改变同时元素的width/height/opacity来显示隐藏元素

slideUp()/slideDown()通过上下滑动来实现元素的隐藏/显示,接受参数与show()/hide()相同
slideToggle()通过上下滑动的方式切换元素的隐藏/显示