各瀏覽器中的 NodeList 接口存在差異
來(lái)源:易賢網(wǎng) 閱讀:910 次 日期:2015-04-22 11:04:32
溫馨提示:易賢網(wǎng)小編為您整理了“各瀏覽器中的 NodeList 接口存在差異”,方便廣大網(wǎng)友查閱!

標(biāo)準(zhǔn)參考

NodeList 接口是由 DOM Level-1-Core 引入的,它是一個(gè)有序的節(jié)點(diǎn)集合抽象,它提供了一個(gè)用來(lái)獲取節(jié)點(diǎn)數(shù)量的屬性 length 和一個(gè)用來(lái)獲得集合中指定索引的節(jié)點(diǎn)的方法 item。

在有些瀏覽器中,一個(gè) NodeList 對(duì)象也具備 HTMLCollection 接口提供的方法。

關(guān)于 NodeList 接口的更詳細(xì)信息,請(qǐng)參考 DOM Level-1-Core 中的內(nèi)容。

關(guān)于 HTMLCollection 接口的詳細(xì)信息,請(qǐng)參考 DOM Level-2-HTML 中的內(nèi)容。

問(wèn)題描述

各瀏覽器中的 NodeList 接口存的實(shí)現(xiàn)有差異。

造成的影響

該問(wèn)題在某些情況下將導(dǎo)致腳本異常。

受影響的瀏覽器

所有瀏覽器

問(wèn)題分析

1. 各瀏覽器中 NodeList 接口的實(shí)現(xiàn)

在 Firefox Chrome Safari 中,對(duì)于 NodeList 的定義與 W3C 相同;而在 IE Opera 中,NodeList 繼承了 Collection 接口,所以 NodeList 也支持 Collection 接口中的方法。

關(guān)于各瀏覽器 NodeList 接口的說(shuō)明,請(qǐng)參考 Mozilla 的 、Safari Webkit DOM 的 和 MSDN 的 中的信息。

2. 各瀏覽器中從 NodeList 中獲取節(jié)點(diǎn)的方法支持差異

2.1. NodeList[index] 和 NodeList[name]

以上兩種方式各瀏覽器都支持。以下測(cè)試代碼中分別用這兩種方式獲取節(jié)點(diǎn),然后將這兩個(gè)節(jié)點(diǎn)的 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>

在各瀏覽器中表現(xiàn)如下:

所有瀏覽器NodeList[index].id: span2

NodeList[name].id: span3

2.2. NodeList(index)

只有 Firefox 不支持 NodeList(index) 。以下測(cè)試代碼中使用這種方式獲取節(jié)點(diǎn),然后輸出 id 屬性值;如果程序出錯(cuò),則輸出拋出異常:

<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>

各瀏覽器中表現(xiàn)如下:

IE Chrome Safari OperaNodeList(index).id: span2

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

2.3. NodeList(name)

Firefox 以及 Webkit 瀏覽器不支持這種方式從集合中獲取元素。以下測(cè)試代碼中用 NodeList(name) 的方式獲取一個(gè)節(jié)點(diǎn),并輸出 id 屬性值;如果程序出錯(cuò),則輸出異常:

<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>

各瀏覽器中表現(xiàn)如下:

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)

所有瀏覽器都支持此方法。以下測(cè)試代碼中使用該方法獲取節(jié)點(diǎn),并輸出節(jié)點(diǎn) id 屬性值;如果程序出錯(cuò),則輸出異常:

<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>

各瀏覽器中表現(xiàn)如下:

所有瀏覽器NodeList.item(index).id: span2

2.5. NodeList.namedItem(name)

Webkit 瀏覽器不支持 NodeList.namedItem(name)。以下測(cè)試代碼中使用該方法獲取節(jié)點(diǎn),并輸出節(jié)點(diǎn) id 屬性值。如果程序出錯(cuò),則輸出異常:

<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>

各瀏覽器中表現(xiàn)如下:

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)支持支持不支持不支持支持

可見(jiàn):

在 IE Opera 中,NodeList 也具備了 HTMLCollection 接口提供的方法,而在 Firefox 中,也不支持通過(guò) NodeList(index) 來(lái)獲取元素。

解決方案

要從 NodeList 中獲取元素,請(qǐng)使用 NodeList[index]、NodeList[name] 或 NodeList.item(index),以保證兼容各瀏覽器。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:各瀏覽器中的 NodeList 接口存在差異
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)