<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
    主站蜘蛛池模板: 国产成人无码区免费内射一片色欲 | 国产精品一区二区三区免费| 乱人伦中文视频在线观看免费| 国产免费人成视频尤勿视频 | 特级aaaaaaaaa毛片免费视频| 一区免费在线观看| 免费看搞黄视频网站| 免费A级毛片无码无遮挡内射| 四虎影院永久免费观看| 亚洲情综合五月天| 亚洲人成电影在线观看网| 337P日本欧洲亚洲大胆艺术图 | 日本中文字幕免费看| 国产精品免费大片| 无码高潮少妇毛多水多水免费| 亚洲成a人片在线观看国产| 亚洲AV人人澡人人爽人人夜夜| 亚洲深深色噜噜狠狠网站| 午夜在线免费视频| 最近免费中文字幕mv电影| 青青草国产免费久久久91| 亚洲精品无码高潮喷水在线| 亚洲一级毛片中文字幕| 一级毛片免费播放男男| h片在线免费观看| 亚洲成av人在片观看| 久久亚洲精品国产精品| 精品亚洲成a人在线观看| 免费国产叼嘿视频大全网站| 性盈盈影院免费视频观看在线一区| 亚洲精品国产精品乱码不卡| 亚洲精品视频在线播放| 日本视频免费观看| 99久久综合国产精品免费| 中文字幕精品亚洲无线码一区应用| 亚洲午夜电影在线观看| www免费插插视频| 成全视频免费高清 | 免费福利在线观看| 国产92成人精品视频免费| 在线观看亚洲精品国产|