2013-07-15 29 views
0

我有以下的HTML

<div class="row-updated"> 
    <div> 
     <span>Title</span> 
     <span>Some text here</span> 
    </div> 
</div> 

<div class="row"> 
    <div> 
     <span>Title</span> 
     <span>Some text here</span> 
    </div> 
</div> 

<div class="row"> 
    <div> 
     <span>Title</span> 
     <span>Some text here</span> 
    </div> 
</div> 

<div class="row-updated"> 
    <div> 
     <span>Title</span> 
     <span>Some text here</span> 
    </div> 
</div> 

我想更新與類「行更新」每個DIV第二範圍的文本循環。

var updated = $('.row-updated span:eq(1)'); 

$.each(updated, function(key, value) { 
    $(this).text('New text here'); 
}); 

但是,這似乎並沒有更新所有的行。它更新了第一個,但不是第二個。

+0

有你'$(文件)。就緒(函數(){});在你的代碼'? – enyce12

+0

@DamianFrizzi是 – madphp

+0

爲什麼'.each()'迭代? jQuery返回一個Object! –

回答

5

你可以達到你想要的東西是這樣的:

var updated = $('.row-updated'); 

$.each(updated, function(key, value) { 
    $(this).find('span').eq(1).text('New text here'); 
}); 
+3

這聽起來像是正確的解決方案,因爲OP想要爲每個div選擇第二個跨度。我不明白爲什麼這個也被低估了。 –

+0

如果跨度總是跟着另一個跨度(如在html例子中),我的答案是最好的,因爲產生較少的開銷。但是如果OP不能保證跨度不會並排,這個答案是最正確的。 – RaphaelDDL

+0

@RaphaelDDL如果OP向每一行添加第三個跨度,會發生什麼情況 - 更新後是否會在解決方案中選擇它們? –

2

:eq()過濾.row-updated span選擇的整個jQuery的集合。

使用此選擇器:

var updated = $('.row-updated span + span'); 

$.each(updated, function(key, value) { 
    $(this).text('New text here'); 
}); 

選擇器的說明: 這個選擇抓起之後是另一span內部.row-updatedspan

我認爲運行速度比實際使用.find().eq()更快,因爲它的功能開銷較小(它只是一個css選擇器)。

當然,考慮第二個跨度後跟第一個,否則你需要findeq

見我jsFiddle

3

.eq()沒有做什麼,你認爲它。您需要在這裏使用.nth-child()

// nth-child() is 1-indexed as @ᾠῗᵲᄐᶌ pointed out in the comment (thanks!). 
var updated = $('.row-updated span:nth-child(2)'); 

$.each(updated, function(key, value) { 
    $(this).text('New text here'); 
}); 

.eq將返回nth元件從整個的結果集,而不是第n span的。

+1

n-child不是0索引:P –

+0

@ᾠῗᵲᄐᶌ謝謝:) – Dogbert

2

好了,因爲所有的答案仍然有.each() ...

你不需要隱式迭代,因爲jQuery是能夠返回一個jQuery對象。

所以,你可以使用:

var allMySecondSpans = $('.row-updated div span:nth-child(2)'); // Or 1 of the other ways 
allMySecondSpans.text('New text here');