以下是我需要抓取的示例代码块:
<p>This paragraph contains <a href="http://twitter.com/chsweb" data-placement="below" rel="twipsy" target="_blank" data-original-title="Twitter">links to Twitter folks</a>, and <a href="http://twitter.com/blogcycle" data-placement="below" rel="twipsy" target="_blank" data-original-title="Twitter">more links to other Twitter folks</a>, but it also contains <a href="http://www.someOtherWebsiteHere.com">non-Twitter links too</a>. How can I list only the Twitter links below?</p>
此脚本会生成页面上每个网址的列表:
<script>
var allLinks = document.links;
for (var i=0; i<allLinks.length; i++) {
document.write(allLinks[i].href+"<BR/>");
}
</script>
如何修改脚本以便它只列出包含某个域的URL,例如; twitter.com /?
这是一个演示页面: http://chsweb.me/OucTum
答案 0 :(得分:1)
在现代浏览器上,您可以使用
轻松检索所有需要的链接var twitter_links = document.querySelectorAll('a[href*="twitter.com"]');
使用.querySelectorAll()
在速度方面有点不利,但可能你不会注意到任何有意义的差异,它会使代码更容易阅读,并且比使用常规的for
循环更短表达
答案 1 :(得分:0)
您可以在link元素上使用window.location
属性来提取href的不同部分。 f.ex:
var link = allLinks[i];
if ( /twitter\.com/.test( link.hostname ) ) {
document.write(link.href+"<BR/>");
}
您的代码的另一个问题:如果您在for循环中使用document.write
,它将有效地清空链接集合,因为它们只是对当前文档中存在的链接的引用。所以永远不会超越第一个链接。将它们收集在一个数组中:
var links = [];
for (var i=0; i<allLinks.length; i++) {
var link = allLinks[i];
if ( /twitter\.com/.test( link.hostname ) ) {
links.push(link.href);
}
}
document.write(links.join('<br>'));
答案 2 :(得分:0)
ORIGINAL:不在演示页面上工作(Sample 6)
<script>
if (allLinks[i].href.match("twitter\.com"))
{
document.write(allLinks[i].href+"<BR/>");
}
</script>
已修订:正在制作演示页(Sample 7)
<script>
var allLinks = document.links;
for (var i=0; i<allLinks.length; i++) {
if (allLinks[i].href.match("twitter.com")) {
document.write(allLinks[i].href+"<BR/>");
}
}
</script>
答案 3 :(得分:0)
以下内容将把所有Twitter链接放在twitter_links
数组中:
var twitter_links = [ ],
links = document.getElementsByTagName('a');
for(var i in links)
{
if(/twitter.com/i.exec(links[i].href))
{
twitter_links.push(links[i]);
}
}
这是给你的jsFiddle&gt; http://jsfiddle.net/Pv8DH/