我有一些没有标签的文字。我试着找到它。使用jQuery
(这是dinamic文本,所以我不知道我有多少文本的和平或它们在哪里。我只知道它们在div中。这与其他问题不同)
我可以找到一个找到没有标签的文本的解决方案,将其包装在<p>
但是这也会产生一些空的p标签。所以问题是:
- This.nodeType === 3似乎找到了文本和空格。有人可以解释一下吗?
- 有人可以解决此问题或显示另一种方法来仅查找没有标签的文本吗?
(我可以找到nodeType === 3&#34;表示元素或属性中的文本内容&#34;)
如果你喜欢在那里玩,请小提琴:http://jsfiddle.net/bhpaf8hu/
$("#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;
解决方案预期:所以我想找到没有标签的文本并将其包装在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>
答案 0 :(得分:6)
避免换行和空格的一种解决方案是使用如下的修剪:
$("#tot")
.contents()
.filter(function () {
// get only the text nodes
return this.nodeType === 3 && this.nodeValue.trim() !== "";
}).wrap("<p />");
<强>参考强>
答案 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>