这就是我所拥有的:
function get_bad_changelist_authors() {
var changelistAuthorDivs = $('div.bad_changelist_author');
var changelistAuthors = [];
for (var div in changelistAuthorDivs) {
changelistAuthors.push($(changelistAuthorDivs[div]).text());
}
return changelistAuthors;
}
changeListAuthorDivs有n个元素,但由于某种原因,它迭代n + 1次并在最后一次迭代时将div初始化为字符串(即字符串“length”)。在最后一次迭代中,这个循环有错误。
答案 0 :(得分:2)
您似乎正在使用jQuery (请确认)。然后,您可以使用.map()
[docs]以更简洁的方式实现相同的目标:
function get_bad_changelist_authors() {
return $('div.bad_changelist_author').map(function() {
return $(this).text();
}).get();
}
或者,如果处理jQuery对象,请使用.each()
[docs]。
一般来说,@ James完全正确,不要使用for...in
迭代数组(see the warning here)。在这种情况下,jQuery对象必须像数组一样对待。
答案 1 :(得分:1)
JavaScript for...in
循环也将迭代对象的属性(length
是对象的属性,这就是为什么你最终得到一个包含该字符串的div
,不是你想要的。请改用普通for
循环:
for(var i = 0; i < changeListAuthorDivs.length; i++) {
//Do stuff
}
答案 2 :(得分:0)
试试这个
for (var div in changelistAuthorDivs) {
if(Object.prototype.hasOwnProperty.call(changelistAuthorDivs[div], div))
changelistAuthors.push($(changelistAuthorDivs[div]).text());
}