2012-09-12 31 views
1

我有以下HTMl结构,我无法更改。jQuery - 查找元素的第n次出现

<div class="X"> 
    <ul> 
     <li><a><img></a></li> 
     <li><a><img></a></li> 
     <li><a><img></a></li> 
     <li><a><img></a></li> 
     <li><a><img></a></li> 
     <li><a><img></a></li> 
     <li><a><img></a></li> 
     <li><a><img></a></li> 
     <li><a><img></a></li> 
     <li><a><img></a></li> 
    </ul> 
</div> 

li项目的数量不同。我想从后面选择第n个元素并修改img src。

这是我到目前为止有:

$('div.X').find('img').css('background-color', 'red'); 

我需要一些方法来遍历所有的.find的结果,然后以某种方式选择的第n个最后一个元素。我想我应该以某种方式扭转列表,所以我可以使用nth-child()选择器。

我发现了各种其他第nth相关的问题,但我无法弄清楚如何钉这个。

任何帮助都非常appriciated。

+0

是否每次都有不同的'nth'?或者它总是“最后1”或“最后2”等......? – andyb

+0

在我的情况下,它实际上是最后一个-1,但是我认为我会写第n个,以使其他人更容易找到和使用。 – Splurk

+0

好吧,现在问题更加清楚了,你可以使用'$('。X li:nth-​​last-child(2)img')。attr('src','newSrc');':-) – andyb

回答

0

在这里你去... http://jsfiddle.net/bYaRx/

我可能得有点过分与实施。我在工作上很无聊。这里是相关的jQuery来获得正确的img标签:

var $img = $('.X img'); 
$img.filter(':eq('+($img .length - (n+1))+')'); 
+0

真棒解决方案,效果很好。我不知道:eq选择器。我结束使用.eq()函数,因为它允许使用负值。 ('div.X')。find('img')。eq(-2).attr('src',newImg); 非常感谢您的快速和彻底的帮助!很多appriciated,会带我永远:-) – Splurk

0
$('div.X img:eq(' + ($('div.X img').length - n) + ')') 

其中n是你想要的回退数。

注意我使用了:eq()而不是:nth-child() - 它们不一样。

注2:这里可能有一个错误的错误,所以一定要测试它。