繁体   English   中英

迭代jQuery $(this).attr('class')。split(“”)给出奇怪的结果

[英]Iterating over jQuery $(this).attr('class').split(“ ”) gives odd results

我有一个页面,我正在尝试获取许多共享一个公共类的div的类数组。 例如:

<div class="common lorem ipsum"></div>
<div class="common dolor sit"></div>
<div class="common hello world"></div>

我想获取每个common类div并获取它的类的数组。 目前,我正在通过使用这个jQuery来做到这一点:

$('.common').each(function(index) {
  var classes = $(this).attr('class').split(" ");
  for(var i in classes) {
    alert(classes[i]);
  }
});

查看第一个生成的classes变量给出了:

classes: Array (3)
0: "common"
1: "lorem"
2: "ipsum"
length: 3
__proto__: Array

问题是for(var i in classes)似乎是迭代__proto__数组并深入研究它 - 有没有人曾经遇到过这个问题? 我使用的是最新版本的Chrome(6.0.453.1)。

for ( var i = 0, l = classes.length; i<l; ++i ) {
 alert( classes[i] );
}

使用常规for循环遍历数组,而不是for...in否则它会枚举数组的属性(因为它仍然是一个对象,除了里面的元素之外还有其他属性)。

要添加其他有效答案,因为您已经在使用jQuery,所以您可以利用jQuery.each

$.each(classes, function (i, cls) {
    alert(cls);
});

@meder正确地回答了你的问题,我只想补充一点,如果枚举的顺序不重要,你总是可以使用这个简化形式:

for ( var i = classes.length; i--; ) {
  alert( classes[i] );
}

它更短,更快。

添加到meder的答案......

有一种方法可以安全地迭代对象,而不会被对象的继承属性所困扰。 hasOwnProperty()来救援:

for(var i in classes) {
  if (classes.hasOwnProperty(i)) {
    var safeValue = classes[i];
  }
}

我在这里看过这个。

我不确定(i in this)0-n杂草的双重检查。

var thisp = arguments[1];
for (var i = 0, len = this.length; i < len; i++){
  if (i in this){
    fun.call(thisp, this[i], i, this); // fun(element,index,array)
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM