2012-09-12 29 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:這裏可能有一個錯誤的錯誤,所以一定要測試它。