0

这是我需要抓取的示例代码块:

<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>

此脚本生成页面上每个 URL 的列表:

<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

4

4 回答 4

1

在现代浏览器上,您可以轻松检索所有所需的链接

var twitter_links = document.querySelectorAll('a[href*="twitter.com"]');

using.querySelectorAll()在速度方面有点不利,但您可能不会注意到任何显着差异,并且它会使代码更易于阅读并且比使用for带有正则表达式的循环更短。

于 2012-08-29T13:42:55.703 回答
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 > http://jsfiddle.net/Pv8DH/

于 2012-08-29T13:34:19.153 回答
0

您可以使用window.location链接元素上的属性来提取 href 的不同部分。前:

var link = allLinks[i];
if ( /twitter\.com/.test( link.hostname ) ) {
    document.write(link.href+"<BR/>");
}

您的代码的另一个问题:如果您document.write在 for 循环中使用,它将有效地清空链接集合,因为它们只是对当前文档中存在的链接的引用。所以它永远不会超过第一个链接。将它们收集在一个数组中:

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>'));

演示:http: //jsfiddle.net/3xub6/

于 2012-08-29T13:31:57.577 回答
0

原文:不在演示页面上工作(示例 6

<script>
if (allLinks[i].href.match("twitter\.com"))
{
     document.write(allLinks[i].href+"<BR/>");
}
</script>

已修订:正在处理演示页面(示例 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> 
于 2012-08-29T13:32:00.730 回答