我有一个页面,我正在尝试为许多共享一个公共类的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)。
答案 0 :(得分:17)
for ( var i = 0, l = classes.length; i<l; ++i ) {
alert( classes[i] );
}
使用常规for循环遍历数组,而不是for...in
,否则它会枚举数组的属性(因为它仍然是一个对象,除了里面的元素之外还有其他属性)。
答案 1 :(得分:4)
要添加其他有效答案,因为您已经在使用jQuery,所以可以利用jQuery.each
:
$.each(classes, function (i, cls) {
alert(cls);
});
答案 2 :(得分:2)
@meder恰到好处地回答了你的问题,我只是想补充一点,如果枚举的顺序不重要,你可以随时使用这种简化形式:
for ( var i = classes.length; i--; ) {
alert( classes[i] );
}
它更短,更快。
答案 3 :(得分:1)
添加到meder的答案......
有一种方法可以安全地迭代对象,而不会被对象的继承属性所困扰。 hasOwnProperty()救援:
for(var i in classes) {
if (classes.hasOwnProperty(i)) {
var safeValue = classes[i];
}
}
答案 4 :(得分:0)
我见过这个用here。
我不确定对(i in this)
0-n
的{{1}}重复检查是什么。
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)
}
}