2013-12-23 180 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