我有一个温和的偏好,在纯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>
不幸的是,我现在得到的是什么......
我该怎么做?
答案 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)
在这个纯JavaScript示例中,我考虑了多个文本节点的可能性,它可能与其他类型的节点交错。从调用/客户端代码传递包含def archives(request, year, month):
post_list = Post.objects.filter(created_time__year=year).order_by('-created_time')
的内容。
NodeList
您可以使用此函数创建一个包装函数,使用此函数来累积多个文本值。