查找没有标签的任何文本

时间:2015-02-22 11:44:33

标签: jquery

我有一些没有标签的文字。我试着找到它。使用jQuery

(这是dinamic文本,所以我不知道我有多少文本的和平或它们在哪里。我只知道它们在div中。这与其他问题不同)

我可以找到一个找到没有标签的文本的解决方案,将其包装在<p>但是这也会产生一些空的p标签。所以问题是:
- This.nodeType === 3似乎找到了文本和空格。有人可以解释一下吗? - 有人可以解决此问题或显示另一种方法来仅查找没有标签的文本吗?

(我可以找到nodeType === 3&#34;表示元素或属性中的文本内容&#34;)

如果你喜欢在那里玩,请小提琴:http://jsfiddle.net/bhpaf8hu/

&#13;
&#13;
$("#tot").click(function() {
				
	$("div").contents().filter(function() {
		return this.nodeType === 3;
	}).wrap("<p>");
	
});
&#13;
p { background:green; }
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="tot"> 
    <h1> This is a h1</h1>
    Text without p
    <br>
    Another text without p
    <br>
    <p>This text has p</p>
</div>
&#13;
&#13;
&#13;

解决方案预期:所以我想找到没有标签的文本并将其包装在p标签中。在这个例子中,这就是我要找的东西:

<div id="tot"> 
    <h1> This is a h1</h1>
    <p>Text without p</p>
    <br>
    <p>Another text without p</p>
    <br>
    <p>This text has p</p>
</div>

2 个答案:

答案 0 :(得分:6)

避免换行和空格的一种解决方案是使用如下的修剪:

$("#tot")
    .contents()
    .filter(function () {
    // get only the text nodes
    return this.nodeType === 3 && this.nodeValue.trim() !== "";
}).wrap("<p />");

fiddle

<强>参考

Node.nodeValue

String.prototype.trim()

答案 1 :(得分:2)

您可以使用$.trim()删除文本节点字符串开头和结尾的所有换行符,空格(包括不间断空格)和制表符。

这将过滤掉那些只包含空格,制表符或换行符的文本节点。

以下是fork of your fiddle以及相应的代码段。

$("#tot").click(function() {
				
	$("div").contents().filter(function() {       
		return     this.nodeType === 3 
                && $.trim($(this).text()) != '';
	}).wrap("<p>");
	
});
p { background:green; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="tot"> 
    <h1> This is a h1</h1>
    Text without p
    <br>
    Another text without p
    <br>
    <p>This text has p</p>
</div>