文本节点的“nodeValue”属性为空 - 那我该如何测试呢?
Posted
技术标签:
【中文标题】文本节点的“nodeValue”属性为空 - 那我该如何测试呢?【英文标题】:"nodeValue" property of text node is blank - how do I test for it then? 【发布时间】:2011-12-01 03:10:59 【问题描述】:假设我有一个非常基本的页面,其中包含一个正文、一个 div 和一个带有一些文本的段落元素。
<body>
<div>
<p>some text</p>
<div>
</body>
根据浏览器,body/div 元素会有文本节点(nodeType === 3, nodeValue === "--blank--")。但是,P 元素将具有合法的文本节点,其 nodeValue === "some text"。
我想知道的是代表空白等于的“假”文本节点的“nodeValue”(--blank--)是什么,因为我想编写一个 if 测试,让我过滤掉假文本节点。
例子:
var body = document.getElementsByTagName("body")[0]; // shortcut to body element.
console.log(body.childNodes[0].nodeValue) // maps to one of the fake text nodes that are blank.
// returns a blank line. What is that "blank" equal to? It's not 'null' or "" or undefined...
干杯, 亚历克斯
【问题讨论】:
访问正文的最快方法是作为 document 的 body 属性,即document.body。 【参考方案1】:只需trim()
[docs] 空格,看看是否还有剩余:
if( body.childNodes[0].nodeValue.trim() )
// more than white space
else
// just white space
如果只有空格,你最终会得到一个虚假的值。否则就成真了。
文档链接提供以下兼容性填充程序:
if (!String.prototype.trim)
String.prototype.trim = function ()
return this.replace(/^\s+|\s+$/g, '');
;
【讨论】:
【参考方案2】:您可以使用正则表达式,例如:
var re = /\S/; // Match non-whitespace
if (node.nodeType == 3 && re.test(node.nodeValue))
// text node has something other than whitespace
请注意,浏览器认为空格和\s
匹配的内容略有不同,但这在这里可能并不重要。
【讨论】:
以上是关于文本节点的“nodeValue”属性为空 - 那我该如何测试呢?的主要内容,如果未能解决你的问题,请参考以下文章