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个小时,这让我很累。任何帮助是极大的赞赏。
谢谢
答案 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/']");