2010-11-19 150 views
8

包含文本的所有元素,我有以下代碼:jQuery的選擇ID

var aggrHTML = $('TBODY#aggr > tr > td > table > tbody > tr > td > nobr > b'); 
      var aggrText = aggrHTML.text(); 
      var newText = "Total" + aggrText.substring(3); 
      aggrHTML.html(newText); 

我想要做的是改變上述所以我選擇其ID包含「匯聚」的所有元素。爲實現這一

非常感謝, 導航

+1

ID應該是唯一的。請說明您是否指ID中包含*'aggr'的所有元素或包含*'aggr'的所有元素。如果你有更多的元素具有相同的ID,你做錯了什麼。 – 2010-11-19 16:03:48

+1

他有ID像'aggr1','aggr2'等,並希望選擇所有這些 – 2010-11-19 16:05:23

+0

@Scott Evernden:是的,我應該看過標題;)@nav:Nevermind。 – 2010-11-19 16:06:10

回答

13
var aggrHTML = $('TBODY[id*=aggr] > tr > td > table > tbody > tr > td > nobr > b'); 
      var aggrText = aggrHTML.text(); 
      var newText = "Total" + aggrText.substring(3); 
      aggrHTML.html(newText); 
8

簡單的方法是

var aggrHTML = $("[id*=aggr]"); 
var aggrText = aggrHTML.text(); 
      var newText = "Total" + aggrText.substring(3); 
      aggrHTML.html(newText); 

如果 「所有元素」 你的意思是,當然所有的DOM元素。

1

以上所有答案都可以在一定程度上起作用,但是您的片段建議您希望每個選定的元素都單獨更新。其他答案中的代碼會將它們中的每一個設置爲與第一個相同的值。

您需要使用的.html()回調簽名:

$('TBODY[id*=aggr] > tr > td > table > tbody > tr > td > nobr > b').html(
    function(idx, oldHTML) { 
     return 'Total' + oldHTML.substring(3); 
    } 
); 

這將逐一更新b元素。

還有一條建議:將元數據或類放在元素的下方。這將顯着簡化您的選擇,加速執行和編寫代碼。例如,在這種情況下,您可以在最低的td元素上放置一個類aggrchild,並執行一個選擇,如$('td.aggrchild b')