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 に答える