【问题标题】:Javascript for loop until - multiple conditionsJavascript for循环直到 - 多个条件
【发布时间】:2012-09-23 08:33:52
【问题描述】:

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

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

我正在尝试以下方法但不起作用:

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

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

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

【问题讨论】:

  • 您可能被否决了,因为您没有具体描述什么不适合您。 IMO,这里有足够的代码和可见的错误,可以给出答案。

标签: javascript for-loop


【解决方案1】:

您应该使用&amp;&amp; 而不是||。另外,$i 应该是i

for(var i=0, img; (img = imgs[i]) && (i < 12); i++)
     found.push(img);

【讨论】:

  • Aaahhhh - 我实际上是在使用 && 而 $i 是我被困在 php 模式!感谢您的帮助
【解决方案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];
}

【讨论】:

  • 很遗憾,.slice 在 IE8 及更低版本中无法以这种方式工作,因为它不是本机对象。
  • @user1689607 你的意思是这个函数不存在?
  • 不,我的意思是 IE 拒绝任何不是原生 JavaScript 对象的 Array.prototype 方法的调用上下文。由于HTMLCollection (或NodeList 或其他) 是一个宿主对象,IE 不喜欢它。
  • @user1689607 该死的 IE - 标准 Array 函数实现的重点是它们应该能够在类似数组的对象上调用。
  • 好吧,至少他们正在改过自新。 :) 但你是对的,根据 ES5,Array 方法应该是通用的。我不知道它在 ES3 中是如何措辞的。
【解决方案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]);
}

【讨论】:

    猜你喜欢
    • 2016-12-18
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多