在 jQuery 中,咱们把 $()
叫作核心函数。css
若是经过核心函数找到的元素不止一个,那么在添加事件(或添加类)的时候,jQuery 会遍历全部找到的元素,给全部找到的元素添加事件(或类)。这就叫作“隐式遍历”。html
举一个用隐式遍历添加事件的例子:api
html:数组
<ul> <li>我是第1个li</li> <li>我是第2个li</li> <li>我是第3个li</li> </ul>
js:函数
$("ul>li").click(function () { console.log($(this).html()); });
这样就给全部的 li 都添加了一个 click 事件。this
再举一个用隐式遍历添加类的例子:spa
html:code
<ul> <li>foo</li> <li>bar</li> </ul>
js:htm
$( "li" ).addClass( "bar" );
仍是这个功能,我使用一个显式遍历的方法 .each()
方法 来写一下。对象
$( "li" ).each(function() { $( this ).addClass( "foo" ); });
这个例子应该就比较明确了,都是遍历选出来的一堆元素,在显式遍历中,每遍历到一个元素,我都得指定一下给该元素添加哪一个类,显然这样写比较啰嗦;而隐式遍历就方便不少,要批量把核心函数找出来的全部元素都添加同一个事件(或一个类),推荐使用隐式遍历的写法。
下面我再举一个用显式遍从来写的例子:
(HTML 部分的代码和上面同样)
$( "li" ).each(function( index ) { console.log( index + ": " + $( this ).text() ); });
.each()
方法就是典型的显式遍历:首先我用选择器选中了全部的 li 元素,造成了一个 jQuery 对象,这个对象是长这样的(是一个伪数组):
[ { 0:li } , { 1:li } ]
每一个元素还有本身的一大堆属性……
(太多了,只截取一部分)
跑题了,回到 .each() 方法。当遍历到第一个 li 元素的时候,就打印第一条信息;遍历到第二个 li 的时候,再打印第二条信息。
再回顾一下刚才那一段代码:
$( "li" ).each(function( index ) { console.log( index + ": " + $( this ).text() ); });
index 是一个形参,表示当前轮到的那个元素的下标。既然是形参,不用 index,用 i 也行。
那么问题来了:为何这个 function 里写一个参数,这个参数就表明下标了呢?
答案是:
.each() 方法的 function,它有2个参数。.each 方法的写法是这样的:
$(selector).each(function( index , element ){ //do something })
function 的第一个参数是整数的下标,第二个参数用于:返回当前读取到的那个元素,好比刚才的代码,element 就是返回每一个 li。因此仍是刚才的代码,咱们也能够这样写:
$( "li" ).each(function( i,element ) { console.log($(element)); console.log( i + ": " + $(element).text() ); });
有时候咱们不写 element,只是由于使用 this 关键词能够替代 element。this 等于 element,一样,$(this)
和$(element)
是同样的。使用$()
选择器选中 this 或者 element 元素以后,咱们就可使用 jQuery 提供的 api,很方便的操做他们,好比,使用 text()方法读取元素的文本内容,或者使用 css()方法修改样式,等等。
总结一下,本文一开始说明了什么是显式遍历,什么是隐式遍历以及两者的区别,而后提到了一个显式遍历方法
.each()
的具体用法。