for循环无法连续循环

时间:2013-12-23 07:56:15

标签: javascript for-loop

var _target=document.querySelectorAll('.post .content');
    var isYT = /youtube|youtu.be/gi;
 for (i = 0; i < _target.length; i++) {
    var _tar = _target[i].children;
    for (var j = 0; j < _tar.length; j++) {
        var vidID;
        if (_tar[j].tagName == "A") {
            if (isYt.test(_tar[j].href) == true) {
                _eles.push(_tar[j]);
            }
        }
        if (_tar[j].tagName == "EMBED") {
            if (isYt.test(_tar[j].src) == true) {
                _eles.push(_tar[j]);
            }
        }
    } //end for loop j
} //end for loop i
  console.log(_eles);

HTML看起来像这样:

<div>
  <a href="www.youtu.be/i23ndf9">Video 1</a>
  <a href="www.youtube.com/v/349234">Video 2</a>
  <embed src="www.youtube.com/v/239324"></embed>
 </div>
<div>
  <a href="www.youtu.be/i23ndf9">Video 1</a>
  <a href="www.youtube.com/v/349234">Video 2</a>
  <embed src="www.youtube.com/v/239324"></embed>
 </div>

虽然返回的数组Object和我的控制台日志记录只显示一个元素和一个embed元素。我必须不断地调用它来将所有链接和嵌入放入数组Object中。任何人都看到我写过的任何错误,现在只是在这个问题上工作了大约3个小时,这让我很累。任何帮助是极大的赞赏。

谢谢

1 个答案:

答案 0 :(得分:1)

我已经改变了你的代码:

var _target = document.querySelectorAll("div");
var _eles = [];
var isYt=new RegExp("\youtube.com");
for (var i = 0; i < _target.length; i++) {
    var _tar = _target[i].childNodes;
    for (var j = 0; j < _tar.length; j++) {
        var vidID;
        if(_tar[j].nodeType != 1) continue;
        if (_tar[j].tagName.toLowerCase() == "a") {
            if (isYt.test(_tar[j].href)) {
                _eles.push(_tar[j]);
            }
        }
        if (_tar[j].tagName.toLowerCase() == "embed") {
            if (isYt.test(_tar[j].src)) {
                _eles.push(_tar[j]);
            }
        }
    } //end for loop j
} //end for loop i
console.log(_eles);

并且有效,请查看此DEMO

但我最喜欢这样做的方式是这样的:

var _target = document.querySelectorAll("div>a, div>embed");
var _eles = [];
var isYt=new RegExp("\youtube.com");
for (var j = 0; j < _target.length; j++) {
    var vidID;

    if (_target[j].tagName.toLowerCase() == "a") {
        if (isYt.test(_target[j].href)) {
            _eles.push(_target[j]);
        }
    }
    if (_target[j].tagName.toLowerCase() == "embed") {
        if (isYt.test(_target[j].src)) {
            _eles.push(_target[j]);
        }
    }
} //end for loop j
console.log(_eles);

检查此DEMO

如果您的isYT正则表达式与我在答案中使用的一样简单,而不是所有这些代码行,您可以这样做:

var _eles = document.querySelectorAll("div>a[href*='youtube.com/'],"+
                                    "div>embed[src*='youtube.com/']");