首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么$.each()不遍历每一项?

为什么$.each()不遍历每一项?
EN

Stack Overflow用户
提问于 2012-11-30 23:50:29
回答 3查看 3.2K关注 0票数 54

下面的标记包含10个具有indent类的pre元素

代码语言:javascript
复制
​<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>​

我使用下面的jQuery .each()函数遍历每个元素:

代码语言:javascript
复制
​$(function(){    
    $.each(".indent", function(index){
       alert(index); 
    });    
});​

我希望看到10个警报,但我只看到了7个

但是,这与$(".indent").each()的预期工作方式相同

代码语言:javascript
复制
$(function(){    
    $(".indent").each(function(index){
       alert(index); 
    });    
});​

查看$.each()文档,我明白了其中的区别:

选择器$.each()函数与$(

).each()不同,后者用于以独占方式遍历jQuery对象。

但我不明白为什么在这种情况下,它不会遍历所有元素。

为什么会发生这种情况?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-30 23:51:46

代码语言:javascript
复制
$.each(".indent", function(index){

不会遍历$('.indent')的元素,而是遍历长度为7个字符的".indent"字符串。

请参阅reference

基于 的更详细说明

jQuery首先检查第一个参数obj (这里是您的字符串)是否有length

代码语言:javascript
复制
var ...
        length = obj.length,
        isObj = length === undefined || jQuery.isFunction( obj );

如果字符串有一个length (并且不是一个函数),那么isObj就是false

在这种情况下,将执行以下代码:

代码语言:javascript
复制
for ( ; i < length; ) {
    if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
        break;
    }
}

因此,给定函数f,下面的代码

代码语言:javascript
复制
$.each(".indent", f);

等同于

代码语言:javascript
复制
for (var i=0; i<".indent".length; i++) {
    var letter = ".indent"[i];
    f.call(letter, i, letter);
}

(您可以使用var f = function(i,v){console.log(v)};记录这些信件,或者使用var f = function(){console.log(this)};提醒您call的一个微妙之处)

票数 145
EN

Stack Overflow用户

发布于 2012-11-30 23:52:12

您正在迭代字符串,应将对象或数组传递给$.each方法:

代码语言:javascript
复制
$(function(){    
    $.each($(".indent"), function(index){
       alert(index);
    });    
});
票数 38
EN

Stack Overflow用户

发布于 2012-11-30 23:53:29

$.each遍历一组数据。由于您传递了一个包含7个字符的字符串,因此它将对每个字符进行迭代。请参见使用示例:

代码语言:javascript
复制
$.each([52, 97], function(index, value) { 
  alert(index + ': ' + value); 
});
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13648515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档