Ответ 1
Вы должны использовать &&
вместо ||
. Кроме того, $i
должен быть i
.
for(var i=0, img; (img = imgs[i]) && (i < 12); i++)
found.push(img);
Я использую javascript, используя регулярное выражение для очистки изображений из html-кода.
Я хочу, чтобы цикл работал до тех пор, пока script не найдет больше изображений или пока не достигнет 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
.
Если вы хотите сделать что-то еще внутри цикла, просто используйте созданный массив, чтобы убедиться, что вы работаете только с 1-м 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]);
}