获取元素的内容而不显示其子元素

时间:2010-07-03 17:01:49

标签: javascript jquery

我有一个温和的偏好,在纯JS中解决这个问题,但如果jQuery版本更简单,那么jQuery也很好。有效的情况是这样的

<span id="thisone">
 The info I want
 <span id="notthisone">
  I don't want any of this nonsense
 </span>
</span>

我实际上想要得到 The info I want
但不是
The info I want I don't want any of this nonsense
我特别不想要 The info I want <span id="notthisone"> I don't want any of this nonsense </span>
不幸的是,我现在得到的是什么......

我该怎么做?

5 个答案:

答案 0 :(得分:30)

仅限js:

试一试: http://jsfiddle.net/g4tRn/

var result = document.getElementById('thisone').firstChild.nodeValue;    

​alert(result);​

使用jQuery:

试一试: http://jsfiddle.net/g4tRn/1

var result = $('#thisone').contents().first().text();  

alert(result);​

<强>加成:

如果您希望获得外部<span>中的其他文本节点,则可以执行以下操作:

试一试: http://jsfiddle.net/g4tRn/4

var nodes = document.getElementById('thisone').childNodes;
var result = '';

for(var i = 0; i < nodes.length; i++) {
    if(nodes[i].nodeType == 3) {       // If it is a text node,
        result += nodes[i].nodeValue;  //    add its text to the result
    }
}

alert(result);
​

答案 1 :(得分:3)

如果你只想要第一个孩子那么它就相当简单了。如果您正在寻找第一个纯文本元素,那么此代码将需要进行一些修改。

var text = document.getElementById('thisone').firstChild.nodeValue;
alert(text);

答案 2 :(得分:1)

你尝试过这样的事吗?

var thisone = $("#thisone").clone();
thisone.children().remove();
var mytext = thisone.html();

答案 3 :(得分:0)

FROM:http://viralpatel.net/blogs/2011/02/jquery-get-text-element-without-child-element.html

 $("#foo")
        .clone()    //clone the element
        .children() //select all the children
        .remove()   //remove all the children
        .end()  //again go back to selected element
        .text();    //get the text of element

答案 4 :(得分:0)

Pure JavaScript

在这个纯JavaScript示例中,我考虑了多个文本节点的可能性,它可能与其他类型的节点交错。从调用/客户端代码传递包含def archives(request, year, month): post_list = Post.objects.filter(created_time__year=year).order_by('-created_time') 的内容。

NodeList

您可以使用此函数创建一个包装函数,使用此函数来累积多个文本值。