找到div中的所有哈希#链接并删除最后20个哈希的哈希值

时间:2011-07-29 13:58:42

标签: jquery hash

我有一个div,其中包含由脚本生成的图库图片的链接。有-let表示x个链接+ 20个由脚本生成的链接。 所以每个链接都有一个#和数字。像www.example.com/#1。 因此,在一个画廊中,我可以拥有5张图片,其中包括#1#2#3等,以及那些总是使用从#6#7到26#开始的数字生成的20张。

所以我的问题是如何用jQuery找到最后二十个url并从中删除#。

Arek

5 个答案:

答案 0 :(得分:2)

var start = $("div a").length - 21;
start = start < 0 ? 0 : start;

$("div a:gt(" + start + ")[href^='#']").each(function() {
    var $a = $(this);
    $a.attr("href", $a.attr("href").replace("#", ""));
});

工作示例:http://jsfiddle.net/958ea/2/


<强>解释

var start = $("div a").length - 21;会将start设置为a标签的总数减去21. 20 + 1,因为长度是总计数,但我们需要基于0的索引。

因此,如果500锚标记start等于479;

如果不存在20个start = start < 0 ? 0 : start;标记,

start会将0重置为a对于这个例子,这可能不是必需的,但是一个很好的检查,所以事情不会破坏。

然后我们使用此选择器遍历a代码:"div a:gt(" + start + ")[href^='#']"将选择索引大于a的所有start代码(其中在我的例子中是index = 10,即<a href="#11">)。接下来,它会对以a开头的#标记进行进一步过滤。 这可能也是不必要的,但另一个好处是要检查。

最后#中的href字符替换为空字符串""

答案 1 :(得分:0)

$("div > a").each(function() {
    var linkURL = $(this).attr("href");
    var newURL = linkURL.replace("#", "");
    //Do something with newURL here.
    //eg. to assign it the new url:
    //$(this).attr("href", newURL);
});

这将使用锚标记定位每个div,所以如果你有多个,请给div一个id,然后像这样定位

$("#theIdYouChose > a").each(function() {
});

答案 2 :(得分:0)

看看jQuery nth-child。仅仅是阅读它应该看起来像

$('body > a:nth-child(n+20)').each(function() {
    var _href = $(this).attr("href").replace("#","");
    $(this).attr("href", _href);
});

编辑:没关系...这将选择第20个链接后的所有链接。不是你想要的。

答案 3 :(得分:0)

如果在锚中用“”替换“#”,它在大多数浏览器中都不会显示为链接。试试这个

var lastAnchor = $("div a[href='#']:last"), count = 0;
while(count++ <= 20){
   lastAnchor  = lastAnchor.attr("href", "javascript:void(0)").prev("a[href='#']");
}

答案 4 :(得分:0)

基于上面的答案,你可以简化一些事情:

$.each(("div a[href^='#']").slice(-20), function() {
    var $a = $(this);
    $a.attr("href", $a.attr("href").replace("#", ""));
});

slice(-20)将获取数组的最后20个元素。