足球游戏_中国足彩网¥体育资讯$

各浏览器中的 NodeList 接口存在差异
来源:易贤网 阅读:813 次 日期:2015-04-22 11:04:32
温馨提示:易贤网小编为您整理了“各浏览器中的 NodeList 接口存在差异”,方便广大网友查阅!

标准参考

NodeList 接口是由 DOM Level-1-Core 引入的,它是一个有序的节点集合抽象,它提供了一个用来获取节点数量的属性 length 和一个用来获得集合中指定索引的节点的方法 item。

在有些浏览器中,一个 NodeList 对象也具备 HTMLCollection 接口提供的方法。

关于 NodeList 接口的更详细信息,请参考 DOM Level-1-Core 中的内容。

关于 HTMLCollection 接口的详细信息,请参考 DOM Level-2-HTML 中的内容。

问题描述

各浏览器中的 NodeList 接口存的实现有差异。

造成的影响

该问题在某些情况下将导致脚本异常。

受影响的浏览器

所有浏览器

问题分析

1. 各浏览器中 NodeList 接口的实现

在 Firefox Chrome Safari 中,对于 NodeList 的定义与 W3C 相同;而在 IE Opera 中,NodeList 继承了 Collection 接口,所以 NodeList 也支持 Collection 接口中的方法。

关于各浏览器 NodeList 接口的说明,请参考 Mozilla 的 、Safari Webkit DOM 的 和 MSDN 的 中的信息。

2. 各浏览器中从 NodeList 中获取节点的方法支持差异

2.1. NodeList[index] 和 NodeList[name]

以上两种方式各浏览器都支持。以下测试代码中分别用这两种方式获取节点,然后将这两个节点的 id 属性值输出:

<script type="text/javascript">

window.onload = function() {

var spans = document.getElementsByTagName("span");

var span2 = spans[1];

var span3 = spans["span3"];

document.getElementById("info").innerHTML = "<br/>NodeList[index].id: " + span2.id + "<br/>NodeList[name].id: " + span3.id;

}

</script>

<span id="span1"></span>

<span id="span2"></span>

<span id="span3"></span>

<div id="info"></div>

在各浏览器中表现如下:

所有浏览器NodeList[index].id: span2

NodeList[name].id: span3

2.2. NodeList(index)

只有 Firefox 不支持 NodeList(index) 。以下测试代码中使用这种方式获取节点,然后输出 id 属性值;如果程序出错,则输出抛出异常:

<script type="text/javascript">

window.onload = function() {

var spans = document.getElementsByTagName("span");

try {

var span2 = spans(1);

document.getElementById("info").innerHTML = "NodeList(index).id: " + span2.id;

} catch(err) {

document.getElementById("info").innerHTML = "NodeList(index): " + err;

}

}

</script>

<span id="span1"></span>

<span id="span2"></span>

<div id="info"></div>

各浏览器中表现如下:

IE Chrome Safari OperaNodeList(index).id: span2

FirefoxNodeList(index): TypeError: spans is not a function

2.3. NodeList(name)

Firefox 以及 Webkit 浏览器不支持这种方式从集合中获取元素。以下测试代码中用 NodeList(name) 的方式获取一个节点,并输出 id 属性值;如果程序出错,则输出异常:

<script type="text/javascript">

window.onload = function() {

var spans = document.getElementsByTagName("span");

try {

var span2 = spans("span2");

document.getElementById("info").innerHTML = "NodeList(name).id: " + span2.id;

} catch(err) {

document.getElementById("info").innerHTML = "NodeList(name): " + err;

}

}

</script>

<span id="span1"></span>

<span id="span2"></span>

<div id="info"></div>

各浏览器中表现如下:

FirefoxNodeList(name): TypeError: spans is not a function

ChromeNodeList(name) : TypeError: Cannot read property 'id' of undefined

SafariNodeList(name): TypeError: Result of expression 'span2' [undefined] is not an object.

IE OperaNodeList(name).id: span2

2.4. NodeList.item(index)

所有浏览器都支持此方法。以下测试代码中使用该方法获取节点,并输出节点 id 属性值;如果程序出错,则输出异常:

<script type="text/javascript">

window.onload = function() {

var spans = document.getElementsByTagName("span");

try {

var span2 = spans.item(1);

document.getElementById("info").innerHTML = "NodeList.item(index).id: " + span2.id;

} catch(err) {

document.getElementById("info").innerHTML = "NodeList.item(index): " + err;

}

}

</script>

<span id="span1"></span>

<span id="span2"></span>

<div id="info"></div>

各浏览器中表现如下:

所有浏览器NodeList.item(index).id: span2

2.5. NodeList.namedItem(name)

Webkit 浏览器不支持 NodeList.namedItem(name)。以下测试代码中使用该方法获取节点,并输出节点 id 属性值。如果程序出错,则输出异常:

<script type="text/javascript">

window.onload = function() {

var spans = document.getElementsByTagName("span");

try {

var span2 = spans.namedItem("span2");

document.getElementById("info").innerHTML = "NodeList.namedItem(name).id: " + span2.id;

} catch(err) {

document.getElementById("info").innerHTML = "NodeList.namedItem(name): " + err;

}

}

</script>

<span id="span1"></span>

<span id="span2"></span>

<div id="info"></div>

各浏览器中表现如下:

ChromeNodeList.namedItem(name): TypeError: Object # has no method 'namedItem'

SafariNodeList.namedItem(name): TypeError: Result of expression 'spans.namedItem' [undefined] is not a function.

IE Firefox OperaNodeList.namedItem(name).id: span2

3. 差异汇总

IEFirefoxChromeSafariOpera

NodeList[index]支持支持支持支持支持

NodeList[name]支持支持支持支持支持

NodeList.item(index)支持支持支持支持支持

NodeList(index)支持不支持支持支持支持

NodeList(name)支持不支持不支持不支持支持

NodeList.namedItem(name)支持支持不支持不支持支持

可见:

在 IE Opera 中,NodeList 也具备了 HTMLCollection 接口提供的方法,而在 Firefox 中,也不支持通过 NodeList(index) 来获取元素。

解决方案

要从 NodeList 中获取元素,请使用 NodeList[index]、NodeList[name] 或 NodeList.item(index),以保证兼容各浏览器。

中国足彩网信息请查看IT技术专栏

中国足彩网信息请查看脚本栏目
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 足球游戏_中国足彩网¥体育资讯$ 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:易贤网
云南网警报警专用图标