我正在使用javascript,使用正则表达式从html代码中抓取图像。
我希望循环运行,直到脚本找不到更多图像或直到它达到12。
我正在尝试以下但不能正常工作:
var imgs = d.getElementsByTagName('img'), found = [];
for(var i=0,img; ((img = imgs[i]) || ( $i < 13)); i++)
这可能吗?我在正确的路线上吗?
javascript的新手但尝试了!
答案 0 :(得分:15)
您应该使用&&
代替||
。此外,$i
应为i
。
for(var i=0, img; (img = imgs[i]) && (i < 12); i++)
found.push(img);
答案 1 :(得分:2)
假设您希望found
包含前12个:
var imgs = d.getElementsByTagName('img');
var found = [].slice.call(imgs, 0, 12);
您必须使用[].slice.call(imgs, ...)
而不是imgs.slice()
,因为imgs
只是一个伪数组,而不是真正的数组。
撰写[].slice
的替代方法是Array.prototype.slice
。
如果您想在循环中执行其他操作,只需使用上面创建的数组,以确保您只处理前12个图像:
for (var i = 0, n = found.length; i < n; ++i) {
// do something with found[i];
}
答案 2 :(得分:2)
我个人讨厌当人们在for
循环的条件子句中进行赋值时,因为看起来有人误认为作业(=
)进行了比较(===
或{{ 1}})。最好在其他地方做逻辑。
==
或
var imgs = d.getElementsByTagName('img'),
found = [],
i,
imgsLength = imgs.length,
max = imgsLength > 13 ? 13 : imgsLength;
for (i = 0; i < max; i++) {
found.push(imgs[i]);
}