17

我正在使用 javascript,使用正则表达式从 html 代码中抓取图像。

我希望循环运行直到脚本找不到更多图像或直到它达到 12。

我正在尝试以下但不工作:

var imgs = d.getElementsByTagName('img'), found = [];
for(var i=0,img; ((img = imgs[i]) || ( $i < 13)); i++)

这可能吗?我在正确的路线上吗?

对javascript很陌生,但正在尝试!

4

3 回答 3

21

您应该使用&&而不是||. 另外,$i应该是i

for(var i=0, img; (img = imgs[i]) && (i < 12); i++)
     found.push(img);
于 2012-10-02T13:26:46.653 回答
4

假设您要found包含前 12 个:

var imgs = d.getElementsByTagName('img');
var found = [].slice.call(imgs, 0, 12);

你必须使用[].slice.call(imgs, ...)而不是imgs.slice()因为imgs它只是一个伪数组,而不是一个真正的数组。

写作的替代方法[].sliceArray.prototype.slice.

如果您想在循环中执行其他操作,只需使用上面创建的数组来确保您只处理前 12 个图像:

for (var i = 0, n = found.length; i < n; ++i) {
    // do something with found[i];
}
于 2012-10-02T13:25:08.570 回答
3

我个人讨厌人们在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]);
}
于 2012-10-02T13:25:17.453 回答