2013-12-23 154 views
1
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看起来有点像这样:for循环失败不断循环

<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中。任何人看到我写的任何错误,刚刚在这个问题上工作了大约3个小时,这让我很累。任何帮助是极大的赞赏。

谢谢

+1

什么是'_target'和'isYt'? – JJJ

+0

控制台中的任何错误? – Grundy

+0

我认为只有'isYt'可能是错误的...... – Krzysiek

回答

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/']"); 
+0

我必须改变你的第一个代码的唯一原因是我实际上必须在我的情况下由于某种原因将isYT循环在一起。所以'var vidID'变成这个'var vidID,isYt = new RegExp('youtu','gi');'谢谢你,因为那是我最大的问题! – EasyBB