2010-11-19 108 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')