jQuery:选择所有内部链接EXCLUDING指向可下载文件的链接

时间:2014-05-16 19:03:17

标签: jquery hyperlink internal

我使用以下jQuery代码来选择所有内部链接......

var siteURL = "http://" + top.location.host.toString();
var $internalLinks = $("a[href^='"+siteURL+"'], a[href^='/'], a[href^='./'], a[href^='../'], a[href^='#']");

它工作得很好。我面临的唯一问题是,我不想选择直接指向可下载文件的内部链接(例如http://www.example.com/downloadable.pdf

扩展可以是任何东西(pdf,mp3,jpg,gif,webm ......等)

现在的问题是,如何从上述标准中排除此类内部链接?

或者,如果我使用.not()函数排除此类链接,问题是,如何选择直接指向此类可下载文件的所有内部链接?

3 个答案:

答案 0 :(得分:4)

一个简单的解决方案是使用带有正则表达式的filternot来拒绝您不想要的链接:

var $internalLinks = $("a[href^='"+siteURL+"'], a[href^='/'], a[href^='./'], a[href^='../'], a[href^='#']");

$internalLinks = $internalLinks.not(function () {
  return $(this).attr('href').match(/\.(pdf|mp3|jpg|jpeg|etc)$/i);
});

相反,假设您的所有"不可下载"以.html.htm结尾的网址将与filter相关联,以获取包含这些扩展程序的链接:

$internalLinks = $internalLinks.filter(function () {
  return $(this).attr('href').match(/\.html?/);
});

答案 1 :(得分:1)

您可以将.not()方法链接到您的选择,并使用带选择器的结尾。 E.g。

$("a[href^=something]").not("[href$=pdf]")

http://api.jquery.com/not/

http://api.jquery.com/attribute-ends-with-selector/

使用jsFiddle示例:http://jsfiddle.net/uPps6/

答案 2 :(得分:0)

如果您有正在使用的文件类型列表,则可以使用.not。未测试的:

$internalLinks = $internalLinks.not($('a[href$=".mp3"]')...