第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

帶有id的DOM樹(shù)元素是否成為全局變量?

帶有id的DOM樹(shù)元素是否成為全局變量?

帶有id的DOM樹(shù)元素是否成為全局變量?研究一個(gè)簡(jiǎn)單的HTMLElement包裝器的想法我偶然發(fā)現(xiàn)了Internet Explorer和Chrome的以下內(nèi)容:對(duì)于DOM樹(shù)中具有ID的給定HTMLElement,可以使用其ID作為變量名來(lái)檢索div。所以對(duì)于一個(gè)喜歡的div<div id="example">some text</div>在Internet Explorer 8和Chrome中,您可以執(zhí)行以下操作:alert(example.innerHTML); //=> 'some text'要么alert(window['example'].innerHTML); //=> 'some text'那么,這是否意味著DOM樹(shù)中的每個(gè)元素都轉(zhuǎn)換為全局命名空間中的變量?它是否也意味著可以使用它作為getElementById這些瀏覽器中方法的替代品?
查看完整描述

5 回答

?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

如前面的答案所述,此行為稱為窗口對(duì)象上的命名訪問(wèn)。該值name的某些元素屬性和值id的所有元素的屬性都可用作為全球性質(zhì)window的對(duì)象。這些被稱為命名元素。由于window是瀏覽器中的全局對(duì)象,因此每個(gè)命名元素都可以作為全局變量訪問(wèn)。

這最初是由Internet Explorer添加的,最終由所有其他瀏覽器實(shí)現(xiàn),僅僅是為了與依賴于此行為的站點(diǎn)兼容。有趣的是,Gecko(Firefox的渲染引擎)選擇僅以怪癖模式實(shí)現(xiàn)此功能,而其他渲染引擎則以標(biāo)準(zhǔn)模式啟用它。

然而,像Firefox 14,火狐現(xiàn)在支持命名訪問(wèn)window的標(biāo)準(zhǔn)模式對(duì)象也是如此。他們?yōu)槭裁锤淖冞@個(gè)?事實(shí)證明,仍有很多網(wǎng)站在標(biāo)準(zhǔn)模式下依賴此功能。微軟甚至發(fā)布了一個(gè)營(yíng)銷演示,阻止了該演示在Firefox中運(yùn)行。

Webkit最近考慮了相反的做法,window僅將對(duì)象的命名訪問(wèn)權(quán)限降級(jí)為怪癖模式。他們通過(guò)與Gecko相同的推理決定反對(duì)它。

所以...瘋狂,因?yàn)榭雌饋?lái)這種行為在標(biāo)準(zhǔn)模式下在所有主流瀏覽器的最新版本中使用現(xiàn)在技術(shù)上是安全的。但是雖然命名訪問(wèn)看起來(lái)有點(diǎn)方便,但不應(yīng)該使用它。

為什么?本文總結(jié)了很多關(guān)于全局變量為什么不好的原因。簡(jiǎn)而言之,擁有一堆額外的全局變量會(huì)導(dǎo)致更多錯(cuò)誤。假設(shè)您不小心輸入了a的名稱var并碰巧鍵入了id一個(gè)DOM節(jié)點(diǎn),SURPRISE!

此外,盡管標(biāo)準(zhǔn)化,但瀏覽器的命名訪問(wèn)實(shí)現(xiàn)仍然存在很多差異。

  • IE錯(cuò)誤地使name表單元素(輸入,選擇等)可以訪問(wèn)屬性的值。

  • Gecko和Webkit錯(cuò)誤地不會(huì)<a>通過(guò)其name屬性訪問(wèn)標(biāo)簽。

  • Gecko錯(cuò)誤地處理了多個(gè)具有相同名稱的命名元素(它返回對(duì)單個(gè)節(jié)點(diǎn)而不是引用數(shù)組的引用)。

如果你嘗試在邊緣情況下使用命名訪問(wèn),我相信還有更多。

正如其他答案中所提到的那樣,document.getElementById用來(lái)獲取對(duì)DOM節(jié)點(diǎn)的引用id。如果需要通過(guò)其name屬性使用來(lái)獲取對(duì)節(jié)點(diǎn)的引用document.querySelectorAll

請(qǐng)不要在您的站點(diǎn)中使用命名訪問(wèn)來(lái)傳播此問(wèn)題。如此多的網(wǎng)絡(luò)開(kāi)發(fā)人員浪費(fèi)時(shí)間試圖追蹤這種神奇的行為。我們確實(shí)需要采取行動(dòng)并讓渲染引擎在標(biāo)準(zhǔn)模式下關(guān)閉命名訪問(wèn)。從短期來(lái)看,它會(huì)破壞一些做壞事的網(wǎng)站,但從長(zhǎng)遠(yuǎn)來(lái)看,這將有助于推動(dòng)網(wǎng)絡(luò)向前發(fā)展。

如果您有興趣,我可以在我的博客上更詳細(xì)地討論這個(gè)問(wèn)題 - https://www.tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/


查看完整回答
反對(duì) 回復(fù) 2019-05-22
?
慕的地10843

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊

getElementById()在這些情況下你應(yīng)該堅(jiān)持,例如:

document.getElementById('example').innerHTML

IE喜歡在全局命名空間中混合使用元素name  ID屬性,因此最好明確指出你想要獲得的內(nèi)容。


查看完整回答
反對(duì) 回復(fù) 2019-05-22
  • 5 回答
  • 0 關(guān)注
  • 716 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)