[英]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.