我使用以下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()函数排除此类链接,问题是,如何选择直接指向此类可下载文件的所有内部链接?
答案 0 :(得分:4)
一个简单的解决方案是使用带有正则表达式的filter
或not
来拒绝您不想要的链接:
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/attribute-ends-with-selector/
使用jsFiddle示例:http://jsfiddle.net/uPps6/
答案 2 :(得分:0)
如果您有正在使用的文件类型列表,则可以使用.not。未测试的:
$internalLinks = $internalLinks.not($('a[href$=".mp3"]')...