jQuery 中的显式遍历(explicitly iterate)与隐式遍历(implicit iteration)

jQuery 中的显式遍历(explicitly iterate)与隐式遍历(implicit iteration)

在 jQuery 中,我们把 $() 叫做核心函数

如果通过核心函数找到的元素不止一个,那么在添加事件(或添加类)的时候,jQuery 会遍历所有找到的元素,给所有找到的元素添加事件(或类)。这就叫做“隐式遍历”。

举一个用隐式遍历添加事件的例子:

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 事件。

再举一个用隐式遍历添加类的例子:

html:

<ul>
  <li>foo</li>
  <li>bar</li>
</ul>

js:

$( "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 } ]

clipboard.png

每个元素还有自己的一大堆属性……
clipboard.png

(太多了,只截取一部分)

跑题了,回到 .each() 方法。当遍历到第一个 li 元素的时候,就打印第一条信息;遍历到第二个 li 的时候,再打印第二条信息。
clipboard.png

再回顾一下刚才那一段代码:

$( "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() 的具体用法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值