javascript - 测试 xml 中是否有空文本节点

标签 javascript xml dom

使用 Ajax 获取 XML 数据。关于空白文本节点的问题

我在这里阅读了这个问题/答案 Javascript/XML - Getting the node name

这帮助我理解了结构的设置方式,但是我仍然有一两个问题......当他提到这部分时:

“带有回车符和一些空格或制表符的文本节点”

您将如何测试是否获得了这样的空文本节点?我尝试测试看看:

if nodeValue == null
nodeValue == "null"
nodeValue == ""
nodeValue == " "

这些似乎都不起作用

我想长度可能是0,所以我测试了.length,它返回了5(1个返回键和4个选项卡..在其中添加了一个额外的选项卡并再次测试它返回了6)

然后我在谷歌上搜索了如何删除空格并使用了这些:

.replace(/\s+/g, ' ');
.replace(/^\s+|\s+$/g, '');

都不起作用,但仍然说 .length 仍然是 5

我想对此进行测试的原因是,如果我事先不知道每个元素节点名称或 DOM 的具体设置方式会怎样。

或者是否有更好的导航方式,而无需费心检查文本节点是否只是制表符/空格/返回键?

最佳答案

.replace(/^\s+|\s+$/g, ''); 有效,除非空格/制表符不是真正的空格和制表符,而是其他各种 Unicode 空格之一类似的 Angular 色。所以我猜你没有正确使用它。

使用方法如下:

if (!textNode.nodeValue.replace(/^\s+|\s+$/g, '')) {
    // Node is empty
}

示例:Live Copy | Live Source

var xml = parseXml("<test>\n\t\t\t</test>");
var textNode = xml.documentElement.firstChild;
display("textNode.nodeValue.length = " +
        textNode.nodeValue.length);
display('Is "empty"? ' +
        (!textNode.nodeValue.replace(/^\s+|\s+$/g, '')));

function display(msg) {
  var p = document.createElement('p');
  p.innerHTML = String(msg);
  document.body.appendChild(p);
}

输出:

textNode.nodeValue.length = 4
Is "empty"? true

(Where parseXML is from this answer.)


But we really don't need to do a replace (although the overhead of doing it is trivial). A test like this would do it:

if (/^\s*$/.test(textNode.nodeValue)) {
    // The node is "empty"
}

该正则表达式(两端带有 anchor 的零个或多个空白字符)将仅匹配已经为空或仅由空白字符组成的字符串。

关于javascript - 测试 xml 中是否有空文本节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17255748/

相关文章:

javascript - AngularJS 中的 ng-init 对我不起作用

javascript - 我是否需要移除或删除我创建但未附加到 DOM 的 HTML 元素?

c# - XML 数据中的 & 符号不允许加载 xml

java - Hibernate:在非主键列上进行一对多映射

java - 更改 liferay 门户中的 Logo

javascript - DOM addEventListener : click works but not keyup

javascript - 缩短 Javascript 函数

javascript - Ember.js 路由器入门

javascript - 每行五个一组打印整数 1-20

java - 不断将 "changing"文本文件放入 ListView