最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js DOM 元素ID就是全局變量

 更新時間:2012年09月20日 23:36:14   作者:  
有人在twitter上提到了:在Chrome的JavaScript終端中,你只需要輸入一個元素的ID,就可以訪問到這個元素.@johnjbarton給了解釋,這是因為所有的元素ID都是全局變量.本文再詳細解釋一下
標準規(guī)范

HTML5規(guī)范文檔中指出:如果一個元素符合下面兩條規(guī)則中的任一條,則window對象中必須要有與之對應(yīng)的一個屬性,屬性值就是這個對象.

  • 如果一個元素擁有ID屬性,那么ID屬性的屬性值就會成為window對象的屬性名.
  • 如果一個元素擁有name屬性,那么name屬性的屬性值就會成為window對象的屬性名.但這個元素的標簽名必須是: a, applet, area, embed, form, frame, frameset, iframe, img, object,其中的一個.

讓我們看一個例子.假定存在一個頁面,該頁面包含了一個ID屬性為“foo”的div元素:

復(fù)制代碼 代碼如下:

<div id="foo"></div>

這樣一來,上面的的div元素就可以通過window.foo(和其他的window屬性一樣),或者全局變量foo來訪問到.比如,在Chrome控制臺中,你可以這樣做:

復(fù)制代碼 代碼如下:

> "foo" in window
true
> foo
<div id="foo"></div>


Firefox

火狐(14)的工作方式略有不同.
復(fù)制代碼 代碼如下:

> "foo" in window
false
> typeof foo // 這個全局變量到底有木有?
object
//錯誤控制臺輸出了下面的警告.//Element referenced by ID/NAME in the global scope.
//Use W3C standard document.getElementById() instead.

> foo
[object HTMLDivElement]
//錯誤控制臺輸出了下面的警告.//Element referenced by ID/NAME in the global scope.
//Use W3C standard document.getElementById() instead.> "foo" in window true


復(fù)制代碼 代碼如下:

> "foo" in window
false
> typeof foo  // 這個全局變量到底有木有?
object
//錯誤控制臺輸出了下面的警告.//Element referenced by ID/NAME in the global scope.
//Use W3C standard document.getElementById() instead.

> foo
[object HTMLDivElement]
//錯誤控制臺輸出了下面的警告.//Element referenced by ID/NAME in the global scope.
//Use W3C standard document.getElementById() instead.> "foo" in window true

這到底是怎么一回事?初始化時,window并沒有屬性foo.但在第一次訪問這個屬性的時候(通過window.foo屬性直接訪問或者通過全局變量foo來訪問都可以),它會被自動建立.

譯者注:我在Firefox14,15,18中都沒有發(fā)現(xiàn)警告,不過在Firefox12試驗時,的確有警告.



[注意:例子中的代碼只能在網(wǎng)頁中通過script標簽運行才能見效,不能通過終端運行.這是因為終端在處理全局對象時,使用了不同的方式.]

譯者注:我在Firebug中嘗試例子中的代碼,并沒發(fā)現(xiàn)有什么差別.

一旦你嘗試讀取foo的值,雖然會正常返回那個div元素,但同時錯誤控制臺會有警告,告訴你不應(yīng)該那么做.很顯然,這樣的警告是正確的:在終端調(diào)試的時候,你可以使用這個特性,但在實際的代碼中,不應(yīng)該使用.

Cody Lindley寫了一個jsPerf測試來比較通過全局變量訪問foo和通過window.foo來訪問foo的性能差別.有趣的是,只有在Firefox中訪問window.foo更快點.

相關(guān)文章

  • js DOM 元素ID就是全局變量

    js DOM 元素ID就是全局變量

    有人在twitter上提到了:在Chrome的JavaScript終端中,你只需要輸入一個元素的ID,就可以訪問到這個元素.@johnjbarton給了解釋,這是因為所有的元素ID都是全局變量.本文再詳細解釋一下
    2012-09-09
  • DOM 高級編程

    DOM 高級編程

    這篇文章主要介紹了DOM 高級編程,需要的朋友可以參考下
    2015-05-05
  • 什么是DOM(Document Object Model)文檔對象模型

    什么是DOM(Document Object Model)文檔對象模型

    文檔對象模型(Document Object Model,DOM)是一種用于HTML和XML文檔的編程接口。它給文檔提供了一種結(jié)構(gòu)化的表示方法,可以改變文檔的內(nèi)容和呈現(xiàn)方式
    2012-03-03
  • javascript針對DOM的應(yīng)用分析(三)

    javascript針對DOM的應(yīng)用分析(三)

    前兩章講了獲取DOM元素。這章就開始講如何操作dom。1.針對頁面上有的DOM元素操作,無非就是對這個dom元素的樣式進行操作
    2012-04-04
  • javascript拓展DOM操作 prependChild insertAfert

    javascript拓展DOM操作 prependChild insertAfert

    Javascript dom操作中有appendChild 和insertBefore 卻沒有prependChild 和insertAfter
    2010-11-11
  • Dom入門教程圖解 推薦

    Dom入門教程圖解 推薦

    Dom并非一種編程語言,Dom只是提供了一系列的接口,利用Dom的這些接口可以很方便的讀取,修改,刪除Html和XML文件中的標簽元素和文本內(nèi)容.在這里我們側(cè)重于講解Dom對Html文件的操作.
    2010-08-08
  • javascript針對DOM的應(yīng)用分析(四)

    javascript針對DOM的應(yīng)用分析(四)

    從這張開始就和大家說一些實用的效果的寫法。當(dāng)然首當(dāng)其沖的就是我們可愛的TAB選項卡,用JQ寫選項卡當(dāng)然是很方便的而且方法也很多。其實用原生的JS寫選項卡方法也很多
    2012-04-04
  • HTML Dom與Css控制方法

    HTML Dom與Css控制方法

    HTML Dom與Css的關(guān)系,大家都知道Css是用來美化網(wǎng)頁.更改網(wǎng)頁中元素的外觀.
    2010-10-10
  • javascript針對DOM的應(yīng)用實例(一)

    javascript針對DOM的應(yīng)用實例(一)

    所謂針對DOM的應(yīng)用。也就我這里只教大家用javascript操作頁面中dom元素做交互
    2012-04-04
  • Dom 是什么的詳細說明

    Dom 是什么的詳細說明

    Dom 英文全稱-Document Object Model 譯成中文即是:文檔對像模型.聽起來很術(shù)語,其實就是文檔內(nèi)容的結(jié)構(gòu)關(guān)系.文檔類型可以是HTML或XML。
    2010-10-10

最新評論

湖北省| 收藏| 浙江省| 边坝县| 望谟县| 图片| 黄梅县| 抚松县| 哈巴河县| 客服| 上犹县| 宜兰县| 台东县| 随州市| 无极县| 桓台县| 青川县| 印江| 三明市| 札达县| 大洼县| 铜鼓县| 拉孜县| 克什克腾旗| 六安市| 天津市| 曲周县| 兴海县| 崇礼县| 宝应县| 岳普湖县| 龙泉市| 兴山县| 沐川县| 略阳县| 英吉沙县| 宁晋县| 安宁市| 宽城| 龙州县| 连平县|