有没有一种方法可以在 JavaScript 中循环遍历 XML 节点的直接子节点,而不使用 jquery 或类似的库?我尝试使用“.childNodes”,但由于某种原因它无法正常工作。 “.childNodes.length”返回一个数字,该数字通常大于直接节点的数量,并且所有标记名称(使用 .tagName)由于某种原因未定义。我知道我的 XML 数据格式正确,因为如果我使用直接子级的标签调用“.getElementsByTagName()”,它就会按预期工作。
我的困境的一些例子:
var root = xmlData.getElementsByTagName("library_geometries")[0];
for (i = 0; i < root.childNodes.length; i++) //get all the geometries
{
geom = root.childNodes[i];
alert(geom.tagName);
}
------------------------------------------------------
geom = root.getElementsByTagName("geometry");
for (i = 0; i < geom.length; i++) //get all the geometries
{
alert(geom[i].tagName);
}
第一个根本不起作用,第二个在本例中起作用。
这实际上是对 Hemlock 答案的澄清。我把它放在这里而不是评论他的答案,因为我没有空间在评论中画漂亮的 ASCII 艺术。
假设我们有以下 XML:
<a><b></b><c></c></a>
这会生成以下 DOM:
<a>--.
|
<b>
|
<c>
这通常是您所期望的。
假设我们现在有以下 XML:
<a>
<b></b>
<c></c>
</a>
您可能会认为这会生成相同的 DOM。但按照标准,你就错了。相反,标准要求它生成以下 DOM:
<a>--.
|
"\n "
|
<b>
|
"\n "
|
<c>
|
"\n"
是的,规范规定所有这些空白都应该在 DOM 中捕获。几乎所有 XML 实现都这样做(不仅在浏览器中)。唯一的例外是 IE(以及 JScript 中的 XML 引擎的扩展),因为 Microsoft 不太关心违反标准。
就我个人而言,99.999% 的情况下这都是无用的。大约唯一有用的时候是当您尝试实现 XML 代码编辑器时。但它是在标准中的,因此如果浏览器想要符合标准,就需要实现它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)