【问题标题】:javascript: check for blank textNodejavascript:检查空白文本节点
【发布时间】:2013-04-30 21:53:03
【问题描述】:

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

我在做:

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

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

(它用于 Chrome 扩展,所以使用 trim 是可以的 - 没有 IE!)

【问题讨论】:

  • 只需添加一个检查不间断空格
  • nbsp;出现在nodeValue中,那是什么问题?
  • 如果唯一的保留是不间断空间,请执行以下操作:element.nodeValue.indexOf("\u00A0") > -1 || element.nodeValue.trim().length > 0

标签: javascript dom


【解决方案1】:

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

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

基于Replacing   from javascript dom text node

【讨论】:

    【解决方案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

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

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

    文本:文本节点的内容

    Node.textContent

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

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

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

    【讨论】:

    • 你正在测试一个元素。 OP 正在测试一个文本节点。
    • 是的,这行得通。我想知道它是否适用于所有空白 HTML 实体。
    • 我相信它应该(没有测试全部),但它很容易测试,只需 fork jsfiddle 并将它们放在那里。
    【解决方案3】:
    if ( element.textContent.trim() ) ...
    

    编辑,真的是想说:

    if ( element.innerHTML.trim() ) ...
    

    【讨论】:

    • 这在功能上与 OP 发布的内容相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2016-06-09
    相关资源
    最近更新 更多