0

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

我在这里阅读了这个问题/答案 Javascript/XML - 获取节点名称

这帮助我理解了很多关于结构是如何设置的但是我仍然有一两个问题..当他提到这部分时:

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

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

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

这些似乎都不起作用

我想也许长度会是 0 所以我测试了 .length 并且它返回了 5(1 个返回键和 4 个选项卡..在那里添加了一个额外的选项卡并再次测试它返回 6)

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

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

都没有工作,仍然说 .length 仍然是 5

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

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

4

1 回答 1

2

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

这将是如何使用它:

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

示例:Live Copy | 直播源

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
是空的”?真的

(这个答案来自哪里。parseXML


但是我们真的不需要做 a replace(尽管做它的开销是微不足道的)。像这样的测试会做到这一点:

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

该正则表达式(零个或多个两端带有锚点的空白字符)将仅匹配已经为空或仅包含空白字符的字符串。

于 2013-06-22T22:10:13.637 回答