2011-07-29 12 views
0

我得到了一个链接到由脚本生成的库图片的div。有-let说x的链接数+ 20这是由脚本生成的。 因此,每个链接都有一个#和数字。像www.example.com/#1一样。 因此,在一个画廊中,我可以有例如5张图片,其中#1#2#3等等,以及始终由#6#7到26#中的数字开始的20个图片。找到一个div中的所有hash#链接并删除最后二十个链接的哈希

所以我的问题是如何用jQuery找到那些最后二十个网址,并从它们中删除#。

Arek

回答

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一个ID和目标像这样反而

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

看在jQuery nth-child。单从阅读它应该是这个样子

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

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

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;

start = start < 0 ? 0 : start;将重置start0如果以某种方式没有20 a标签存在。 对于这个例子,这可能不是必要的,但一个很好的检查,所以事情不会中断。

然后,我们通过使用这个选择器a标签循环:"div a:gt(" + start + ")[href^='#']"这是会选择具有比start值更大的索引的所有a标记(这在我的例子是指数= 10,它是<a href="#11">)。接下来,它进一步过滤a开始的标签#这可能也是不必要的,但是检查是另一件好事。

最后,如果你在它没有出现在大多数浏览器的链接锚代替“#”改为“”在href#字符替换为空字符串""

+0

哇,谢谢你:)感谢您的可视化:D – altheris

+0

这看起来可以找到第20个链接后的所有链接,而不是像描述所说的最后20个链接。在说明中他说#6-#26链接是需要改变的。 – Danny

+0

@user - 它不会做你的想法。检查一下这个例子,你会发现它已经选择了最后的20个锚定标记 – hunter

0

。尝试在回答这个

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

楼以上可以简化事情有点:

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

切片(-20)会抢了数组的最后20个元素。

相关问题