<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Flyingis

    Talking and thinking freely !
    Flying in the world of GIS !
    隨筆 - 156, 文章 - 16, 評(píng)論 - 589, 引用 - 0
    數(shù)據(jù)加載中……

    用 JavaScript 玩轉(zhuǎn) DOM Level 1

        作者:Flyingis

        DOM(The Document Object Model)將HTML轉(zhuǎn)換為XML文檔格式來(lái)表達(dá),為動(dòng)態(tài)HTML編程提供了一種優(yōu)雅的解決方案。DOM編程可以使用多種語(yǔ)言(Java中可以使用SAX進(jìn)行XML編程),不論大家使用何種服務(wù)器端技術(shù),JavaScript的DOM基礎(chǔ)編程還是需要掌握的,最常見的莫過(guò)于getElementById(),引用Prototype.js使用最多的也是$(""),但是要做好Web客戶端設(shè)計(jì),我們需要了解更多更細(xì)。

        當(dāng)前各種主流瀏覽器對(duì)DOM Level 1標(biāo)準(zhǔn)支持的相對(duì)較好,我們就來(lái)看看在JavaScript中如何玩轉(zhuǎn)DOM Level 1。

        眾所周知,對(duì)于XML所有的節(jié)點(diǎn)都是Node類型,整個(gè)XML文檔的根節(jié)點(diǎn)是一個(gè)Document,通過(guò)document.documentElement來(lái)獲取根節(jié)點(diǎn),特殊的是在IE5.5中返回的是body元素。除此之外還有其他各式各樣的節(jié)點(diǎn)類型,下面列舉幾個(gè)常見的:

        DocumentType:代表DTD的引用
        Element:代表XML中的各種標(biāo)簽,并且是整個(gè)文檔中唯一可以擁有屬性的節(jié)點(diǎn)
        Attr:節(jié)點(diǎn)屬性的鍵-值對(duì)
        Text:開始標(biāo)簽和結(jié)束標(biāo)簽之間的文本值
        Comment:代表XML的注釋節(jié)點(diǎn)


        JavaScript中定義了12個(gè)常量來(lái)分別代表12種不同的節(jié)點(diǎn)類型,通過(guò)這些常量可以判斷當(dāng)前變量中的節(jié)點(diǎn)類型,這些節(jié)點(diǎn)擁有一系列的屬性和方法,具體可以參考相關(guān)資料。需要說(shuō)明的是編程中用NodeList表示Node的集合,NamedNodeMap表示Attribute的集合,在獲取了節(jié)點(diǎn)、屬性之后可以將節(jié)點(diǎn)、屬性保存在NodeList、NameNodeMap中,如何獲取節(jié)點(diǎn)、屬性值在下面會(huì)談到。順便說(shuō)一下,雖然各種主流瀏覽器均支持DOM,但支持程度不一,Mozilla在這方面做的是最好的,它支持DOM Level 1和Level 2的所有標(biāo)準(zhǔn),包括DOM Level 3部分標(biāo)準(zhǔn),但是鑒于IE在市場(chǎng)中的主流地位,很多時(shí)候我們都需要做多種考慮。舉個(gè)例子:

    // 標(biāo)簽中間是一空格
    <tag id="tagId"> </tag>

    // 獲取tag節(jié)點(diǎn)
    var tagId = document.getElementById("tagId");
    // 在Mozilla中返回true,IE中返回false
    alert(tagId.hasChildNodes());


        獲取屬性

        Element是所有節(jié)點(diǎn)中唯一擁有屬性的節(jié)點(diǎn),NamedNodeMap表示Node節(jié)點(diǎn)的屬性,擁有以下方法:

        getNamedItem(name)
        removeNamedItem(name)
        setNamedItem(node)
        item(pos) 

        各種方法涉及的對(duì)象是屬性節(jié)點(diǎn)名稱,而不是屬性值。另外,通過(guò)下列方法可以實(shí)現(xiàn)同樣的功能:

        getAttribute(name)
        setAttribute(name, value)
        removeAttribute(name)

        獲取節(jié)點(diǎn)

        XML Node節(jié)點(diǎn)獲取方式大家應(yīng)該都非常熟悉了:

        getElementsByTagName()
        getElementsByName()
        getElementById()


        getElementsByTagName("*")可以獲取所有的Element,但是IE中,需要使用document.all來(lái)實(shí)現(xiàn)這個(gè)功能。IE6.0和Opera老版本的瀏覽器對(duì)于getElementsByName()的支持存在一些問(wèn)題,一般不推薦使用。對(duì)于getElementById("idVal"),如果Element的name和參數(shù)idVal匹配,會(huì)獲得該Element。 

        創(chuàng)建和控制節(jié)點(diǎn)

        create***一系列的方法以及appendChild()、removeChild()、replaceChild()、insertBefore()、createDocumentFragment(),提供了創(chuàng)建各種節(jié)點(diǎn)的功能,參考相關(guān)資料。


        上面討論是JavaScript對(duì)XML的操作,如果僅僅對(duì)HTML DOM進(jìn)行操作,編程相對(duì)更為簡(jiǎn)單,如HTML元素的屬性可以直接作為代碼的屬性:

    <img id="img" src=""/>

    var img = document.getElementBy("img");
    // 設(shè)置圖片的路徑
    img.setAttribute("src""pic.gif");
    // 輸出圖片的路徑,結(jié)果和上面設(shè)置的路徑相同
    alert(img.src);

        同樣需要我們注意的是,IE對(duì)setAttribute()支持的并不是很好,在大多數(shù)情況下,應(yīng)該避免使用setAttribute()。

        除此之外,在HTML DOM中還有一系列的方法用來(lái)操作table,這里不作詳述,在自己現(xiàn)在設(shè)計(jì)的Web程序中已經(jīng)沒(méi)有使用了。

        看來(lái)要用JavaScript玩轉(zhuǎn)DOM Level 1不是件容易的事情,最主要的問(wèn)題還是在不同瀏覽器的兼容性上,表現(xiàn)最為“突出”的是IE,現(xiàn)在IE7已經(jīng)推出,但對(duì)于標(biāo)準(zhǔn)的兼容還是不盡如人意。經(jīng)常在Java、C#、JavaScript各種不同語(yǔ)言中操作XML,一段時(shí)間過(guò)后就容易迷糊,我自己就是這樣,上面將JavaScript相關(guān)的操作簡(jiǎn)單整理了一下,不是很詳細(xì),畢竟都是大家熟悉的東西,但是在使用的時(shí)候看看就知道具體該怎么處理了,實(shí)在不行就參考相關(guān)的書籍和電子文檔吧。

        寫這些的時(shí)候辦公室有人把電腦聲音打開了看電視,還不停找話題和大家聊天,我戴上耳機(jī)也只能勉強(qiáng)用音樂(lè)擋住他放出的噪音,最鄙視這種人,和老板一個(gè)鼻孔出氣,啥都不是但老板信任,沒(méi)有辦法,碰到這樣的團(tuán)隊(duì),不知道大家碰到這種情況是否和我一樣戴上耳機(jī)?呵~

    posted on 2006-11-07 22:14 Flyingis 閱讀(5356) 評(píng)論(6)  編輯  收藏 所屬分類: Web 客戶端技術(shù)

    評(píng)論

    # re: 用 JavaScript 玩轉(zhuǎn) DOM Level 1  回復(fù)  更多評(píng)論   

    沙發(fā),學(xué)習(xí)^+^
    2006-11-07 22:18 | 馬嘉楠

    # re: 用 JavaScript 玩轉(zhuǎn) DOM Level 1  回復(fù)  更多評(píng)論   

    幾個(gè)筆誤:
    1.
    “隨便說(shuō)一下,雖然各種主流瀏覽器均支持DOM,但支持程度不一。。”
    應(yīng)該是“順便說(shuō)一下。。。”
    2.
    “XML Node節(jié)點(diǎn)獲取方式大家應(yīng)該都非常的屬性了”
    應(yīng)該是“。。。非常的熟悉了”
    2006-11-07 22:44 | 馬嘉楠

    # re: 用 JavaScript 玩轉(zhuǎn) DOM Level 1  回復(fù)  更多評(píng)論   

    @馬嘉楠
    昨天只想快點(diǎn)寫完休息,留下了不少筆誤:)
    謝謝你的提示,已經(jīng)更正。
    2006-11-08 08:34 | Flyingis

    # re: 用 JavaScript 玩轉(zhuǎn) DOM Level 1  回復(fù)  更多評(píng)論   

    獲取節(jié)點(diǎn)里面,不是getElementsById(),而是getElementById()。沒(méi)有“s”
    2006-12-21 13:43 | 過(guò)路的

    # re: 用 JavaScript 玩轉(zhuǎn) DOM Level 1[未登錄](méi)  回復(fù)  更多評(píng)論   

    過(guò)路的 說(shuō)的問(wèn)題還沒(méi)有改過(guò)來(lái)噢~~
    2007-07-13 15:07 | 學(xué)習(xí)筆記

    # re: 用 JavaScript 玩轉(zhuǎn) DOM Level 1  回復(fù)  更多評(píng)論   

    @學(xué)習(xí)筆記
    謝謝提醒,已經(jīng)改過(guò)來(lái)了。
    2007-07-16 08:50 | Flyingis
    主站蜘蛛池模板: 国内自产拍自a免费毛片| 老司机69精品成免费视频| 免费看国产成年无码AV片| 亚洲综合久久久久久中文字幕| 日本免费久久久久久久网站| 亚洲国产精品自在在线观看 | 日日摸夜夜添夜夜免费视频 | 精品久久久久久亚洲精品| 免费观看激色视频网站(性色) | 免费乱码中文字幕网站| 特级aaaaaaaaa毛片免费视频| 亚洲麻豆精品国偷自产在线91| 四虎一区二区成人免费影院网址| 亚洲精品无码日韩国产不卡?V| 免费一级毛suv好看的国产网站| 亚洲精品国产精品乱码不卡| 中文字幕一区二区三区免费视频| 亚洲AV无码第一区二区三区| 每天更新的免费av片在线观看| 国产成人精品日本亚洲11| 日本免费一区尤物| fc2免费人成在线| 久久久久久亚洲精品| 18勿入网站免费永久| 国产偷国产偷亚洲高清人| 亚洲中文字幕无码一区| 中文字幕免费视频| 亚洲日韩精品国产一区二区三区| 少妇亚洲免费精品| 无码A级毛片免费视频内谢| 国产成人精品亚洲日本在线 | 亚洲日韩亚洲另类激情文学| 亚洲A∨午夜成人片精品网站| 免费无码又爽又刺激网站直播| 亚洲人成网站18禁止久久影院 | 一级午夜a毛片免费视频| 亚洲av午夜福利精品一区| 国产福利在线观看免费第一福利| 午夜在线免费视频 | 久久免费国产视频| 亚洲精品第一国产综合亚AV|