0

我在表单上有 div:

<div id="foo">
<div>koko</div>
<div>lala</div>
Plain text here
<div>Another div</div>
</div>

我想使用 jquery 来保留“纯文本”,但不在其他 div 中显示任何其他内部元素。

我尝试使用.not这样的:

alert($("#foo).not("div").text());

但它不显示任何东西。

4

5 回答 5

3

您需要做的就是:

$('#foo *').remove();​​​​​​​​​

选择器选择 #foo 中的任何元素,并且只会保留您要查找的文本。

演示

于 2012-09-15T17:37:03.773 回答
2

如果您只想删除包装的文本,也许这会起作用:

$("#foo *").remove();

我误解了你的问题吗?

于 2012-09-15T17:37:03.337 回答
2

试试这个:

var text = $('#foo').clone().find('*').remove().end().text()

http://jsfiddle.net/LtMHE/

于 2012-09-15T17:37:05.093 回答
1

试试这个:

alert($("div#foo").clone().children().remove().end().text());

希望这会有所帮助!

于 2012-09-15T17:49:42.447 回答
0

另一种获取纯文本的方法是使用这些 jQuery 方法 -> contents() 和 filter()。

内容[来源:文档]

描述:获取匹配元素集中每个元素的子元素,包括文本和注释节点

所以我们可以同时得到 DIV 和 #text 节点。

过滤器[来源:文档]

将匹配元素集减少为匹配选择器或 通过函数测试的元素集。

在函数测试中,我们将只保留我们想要的文本节点(nodeType == 3,即文本)。所以,最后,我们有:

$("#foo").contents().filter(function(){ return this.nodeType == 3}).text().trim();

( trim() 在这里不选择样本中的所有换行符,因为它们也是文本)

演示 js 小提琴

于 2012-09-15T18:42:30.300 回答