有没有一种方法可以遍历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代码编辑器.但是它在标准中,因此如果浏览器想要符合标准,则需要实施它.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。