仅选择元素的文本(不是其子元素/后代的文本)

时间:2010-07-16 20:16:50

标签: javascript jquery html

请考虑以下HTML:

<td>
  Some Text
  <table>.....</table>
</td>

我需要操纵td元素的“Some Text”文本。我不应该触及此td内的表格元素。

所以,例如,也许我想用“@”替换所有“e”。我用jQuery的.text()和.html()尝试了一些方法。我似乎总是从子表中选择一些我不应该触摸的东西。另外,不幸的是,我无法将“Some Text”包装成span或div。

2 个答案:

答案 0 :(得分:7)

$(function(){
  $('td').contents().each(function(){
     if(this.nodeType === 3)
      $(this).replaceWith(this.wholeText.replace(/e/g, '#'));
  });
});

或者像你建议的那样

$('td').contents().each(function(){
  if(this.nodeType === 3)
     this.data = this.wholeText.replace(/e/g, '#');
 });

.contents()提供所有元素, textNodes

答案 1 :(得分:4)

如果你想为td中的每个文本做一些事情,你可以用循环迭代它们:

var nodes=tdEl.childNodes;
for(var i=0; i<nodes.length; ++i){
  if(nodes[i].nodeType===3){  // 3 means "text"
    nodes[i].data = nodes[i].wholeText.replace(/e/g, '@');
  }
}

我是否理解您正在寻找的内容?

你可以使用jQuery,如果你已经为其他东西加载它,但我不会在24kb的库中加载上面的一小段代码。