5

检查 DOM 文本节点是否为空白的最佳方法是什么?空白是指只有空格、回车符、制表符等。如果它包含 nbsp; 那么它不是空白的。

我在做:

element.nodeValue.trim().length != 0

但是,这也摆脱了我不想要的 nbsp;。

(它用于 Chrome 扩展,因此可以使用 trim - 没有 IE!)

4

3 回答 3

3

我最终更换了 nbsp;用一个字符然后修剪。

element.nodeValue.replace(/\u00a0/g, "x").trim().length != 0

基于替换   来自 javascript dom 文本节点

于 2013-05-01T06:04:58.573 回答
2

像这样的东西

HTML

<div id="test1">        
    </div>
<div id="test2">    &nbsp;      
    </div>

Javascript

var test1 = document.getElementById("test1");
var test2 = document.getElementById("test2");

function escapeHTML(str) {
    var pre = document.createElement('pre');
    pre.appendChild(document.createTextNode(str));
    return pre.innerHTML;
}

console.log(escapeHTML(test1.textContent).trim().length === 0);
console.log(escapeHTML(test2.textContent).trim().length === 0);

jsfiddle 上

输出是

true
false

或使用 nodeValue

Javascript

var test1 = document.getElementById("test1").firstChild;
var test2 = document.getElementById("test2").firstChild;

function escapeHTML(str) {
    var pre = document.createElement('pre');
    pre.appendChild(document.createTextNode(str));
    return pre.innerHTML;
}

console.log(escapeHTML(test1.nodeValue).trim().length === 0);
console.log(escapeHTML(test2.nodeValue).trim().length === 0);

输出

true
false

jsfiddle 上

请参阅Node.nodeValueNode.textContent

节点.nodeValue

返回或设置当前节点的值。

下表显示了不同元素的返回值: ...

text:文本节点的内容

节点文本内容

获取或设置节点及其后代的文本内容。

在第一种情况下,我得到了 div 元素及其后代的文本内容。

在第二种情况下,我选择 div 的第一个文本节点,它恰好是第一个子节点,并获取它的节点值。

于 2013-04-30T22:16:45.787 回答
-4
if ( element.textContent.trim() ) ...

编辑,真的是想说:

if ( element.innerHTML.trim() ) ...
于 2013-04-30T21:54:59.633 回答