我正在使用 javascript,使用正则表达式从 html 代码中抓取图像。
我希望循环运行直到脚本找不到更多图像或直到它达到 12。
我正在尝试以下但不工作:
var imgs = d.getElementsByTagName('img'), found = [];
for(var i=0,img; ((img = imgs[i]) || ( $i < 13)); i++)
这可能吗?我在正确的路线上吗?
对javascript很陌生,但正在尝试!
我正在使用 javascript,使用正则表达式从 html 代码中抓取图像。
我希望循环运行直到脚本找不到更多图像或直到它达到 12。
我正在尝试以下但不工作:
var imgs = d.getElementsByTagName('img'), found = [];
for(var i=0,img; ((img = imgs[i]) || ( $i < 13)); i++)
这可能吗?我在正确的路线上吗?
对javascript很陌生,但正在尝试!
您应该使用&&
而不是||
. 另外,$i
应该是i
。
for(var i=0, img; (img = imgs[i]) && (i < 12); i++)
found.push(img);
假设您要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];
}
我个人讨厌人们在for
循环的条件子句中进行赋值,因为看起来有人将赋值 ( =
) 误认为是比较 (===
或==
)。最好在别处做逻辑。
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]);
}
或者
var imgs = d.getElementsByTagName('img'),
found = [],
i,
imgsLength = imgs.length;
for (i = 0; i < 13 && i < imgsLength; i++) {
found.push(imgs[i]);
}