如何获取元素周围的文字?

时间:2010-12-21 16:32:19

标签: javascript jquery

如果我有

<div id='wrapper'>
  <fieldset id='fldset'>
    <legend>Title</legend>
    Body text.
  </fieldset>
</div>

如何在不检索图例标记内的文本的情况下检索“正文”?

例如,如果我想查看字段集中的文本是否包含单词“body”并更改该单词,而忽略了图例中可能包含的内容? innerHTML检索所有子节点的所有文本。

使用jQuery不会有问题。

6 个答案:

答案 0 :(得分:4)

$("#fldset").contents().eq(2).text();

答案 1 :(得分:3)

没有图书馆 -

var fldset = document.getElementById("fldset"),
    txt = fldset.lastChild.textContent || fldset.lastChild.innerText;

alert(txt);

答案 2 :(得分:2)

这将使fldset的所有文本节点遗漏任何其他元素及其内容:

var fldsetContent = $('#fldset').contents();
var text = '';
$(fldsetContent).each( function(index, item) {
    if( item.nodeType == 3 ) text += $.trim($(item).text());
});
alert( text );

<强> Live example

答案 3 :(得分:1)

$('#fldset').clone().find('legend').remove().end().text()

但你也应该搜索SO

答案 4 :(得分:0)

我想不出除

之外的其他方式
$("#result").html($("#wrapper").text().replace($("legend").text(),""));

但应该有一个更优雅的方式。您还可以创建一个新元素作为此元素的副本,删除所有子元素并获取文本。嗯... 那将是

var newElement = $("#fldset").clone();
newElement.children().remove();
$("#result").html(newElement.text());

所以无论子节点有多少和哪种类型,这都行不通。这里:http://www.jsfiddle.net/wFV4c/

答案 5 :(得分:0)

要将字段内的所有纯文本节点设置为红色:

jQuery.each($('#fldset').contents(),function(index,value){
  if(value.textContent == value.nodeValue){
    $(this).wrap('<span style="color:red;" />')
  }
});