国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

DOM【介紹、HTML中的DOM、XML中的DOM】

tomorrowwu / 2610人閱讀

摘要:的的是一個內存對象樹,在瀏覽器中只保存一份,的修改的內容會直接反應到瀏覽器中對象在眼中,是由不同類型的節(jié)點組成的,這些節(jié)點都屬性對象。那么,我們需要裝載服務器的文件或字符串到中的對象。現(xiàn)在問題就是,和的裝載方式是不一樣的。

什么是DOM?

DOM(Document Object Model)文檔對象模型,是語言和平臺的中立接口。。

允許程序和腳本動態(tài)地訪問和更新文檔的內容

為什么要使用DOM?

Dom技術使得用戶頁面可以動態(tài)地變化,如可以動態(tài)地顯示或隱藏一個元素,改變它們的屬性,增加一個元素等,Dom技術使得頁面的交互性大大地增強

HTML的DOM

HTML的DOM是一個內存對象樹,在瀏覽器中只保存一份,HTML的DOM修改HTML的內容會直接反應到瀏覽器中

API NODE對象API

在DOM眼中,HTML是由不同類型的節(jié)點組成的,這些節(jié)點都屬性NODE對象。

NODE對象有一個nodeType的屬性可用于判斷節(jié)點類型

HTML不同類型的節(jié)點之間都是有聯(lián)系的:

位于一個節(jié)點之上的節(jié)點是該節(jié)點的父節(jié)點(parent)

一個節(jié)點之下的節(jié)點是該節(jié)點的子節(jié)點(children)

同一層次,具有相同父節(jié)點的節(jié)點是兄弟節(jié)點(sibling)

一個節(jié)點的下一個層次的節(jié)點集合是節(jié)點后代(descendant)

父、祖父節(jié)點及所有位于節(jié)點上面的,都是節(jié)點的祖先(ancestor)

于是乎,NODE對象也有訪問節(jié)點的屬性和方法

屬性:

總的來說就是:得到節(jié)點的信息(節(jié)點名字、節(jié)點值)以及訪問節(jié)點的兄弟、父親

方法:

總的來說就是:添加、替換、刪除子節(jié)點,判斷是否有子節(jié)點,克隆子節(jié)點

document

HTML的DOM中我們提到并大量使用了document這個Javascirpt的內置對象,請注意這個對象僅僅可以表示HTML的根節(jié)點

document的屬性:

documentElement【可以獲取得到這個節(jié)點】

document方法:

createElement()【創(chuàng)建一個元素節(jié)點】

createComment()【創(chuàng)建注釋】

createAttribute()【創(chuàng)建屬性節(jié)點】

createTextNode()【創(chuàng)建文本節(jié)點】

getElementById()【通過id得到該元素節(jié)點】

getElementsByTagName()【通過標簽名,得到所有標簽名的數(shù)組】

Element接口

Element代表的是元素節(jié)點,是我們經(jīng)常用到的一個接口!

Element屬性:

tagName【返回的是元素標簽的大寫名稱

Element方法:

getAttribute(String name)【得到屬性的值】

setAttribute(String name,String value)【設置屬性的名稱和值,不存在則創(chuàng)建】

getElementsByTabName()【返回該元素節(jié)點的子孫節(jié)點的數(shù)組

removeAttribute()【移除屬性】

當我們設置屬性的時候,我們不是調用方法來設置,而經(jīng)常會這樣做:

    var input = document.createElement("input");
    input.value = "aa";
    input.name = "bb";
XML的DOM

我們可能會用XML文件作為客戶端和服務器的傳輸文件。于是我們需要學習在JavaScript代碼中通過DOM操作XML文檔

XML和HTML的API是十分類似的,這里就不贅述了。

裝載XML

客戶端和服務端如果是通過XML文件或者XML字符串進行交互數(shù)據(jù)的話。那么,我們需要裝載服務器的XML文件或XML字符串到JavaScript中的DOM對象。

現(xiàn)在問題就是,IE和fireFox的裝載XML方式是不一樣的。因此,我們最好封裝成一個方法來裝載XML

/**
 * @param flag true代表的是文件,false代表的是字符串
 * @param xmldoc 要封裝成DOM對象的字符串或文件
 * @return 返回的是根節(jié)點的元素節(jié)點
 *    重點放在高版本上!!
 * */


function loadXML(flag, xmldoc) {

    //瀏覽器是低版本的IE
    var objXml;
    if (window.ActiveXObject) {

        //是IE的話,有兩種方式來創(chuàng)建ActiveXObject對象
        var name = ["MSXML2.DOMDocument", "Miscrosoft.XmlDom"];
        for (var i = 0; i < name.length; i++) {
            objXml = new ActiveXObject(name);
            break;
        }

        //設置為同步【裝載XML文件成DOM對象,我們都是同步操作】
        objXml.async = false;

        //如果是字符串
        if (flag == false) {
            objXml.loadXML(xmldoc);
        } else {
            //如果是文件
            objXml.load(xmldoc)
        }
        return objXml.documentElement;


        //瀏覽器是fireFox或者高版本的IE
    } else if (document.implementation.createDocument) {
        //字符串
        if (flag == false) {

            //創(chuàng)建對象,解析XML字符串
            objXml = new DOMParser();

            //解析到根節(jié)點
            var root = objXml.parseFromString(xmldoc, "text/xml");
            return  root.documentElement;


        } else {

            //由于安全問題,想要得到XML文件,需要通過XMLHttpRequest對象來獲取
            objXml = new XMLHttpRequest();

            //同步
            objXml.open("GET", "1.xml", false);

            objXml.send(null);

            //返回XML數(shù)據(jù)
            return objXml.responseXML.documentElement;

        }
        //解析不了啦
    } else {
        alert("解析不了了");
    }

}
測試

去除空白字符

如果有需要就加這段功能吧!

function removeBlank(xml) {
    if (xml.childNodes.length > 1) {
        for (var loopIndex = 0; loopIndex < xml.childNodes.length; loopIndex++) {
            var currentNode = xml.childNodes[loopIndex];
            if (currentNode.nodeType == 1) {
                removeBlank(currentNode);
            }
            if (((/^s+$/.test(currentNode.nodeValue))) && (currentNode.nodeType == 3)) {
                xml.removeChild(xml.childNodes[loopIndex--]);
            }
        }
    }
}


XPATH

XPATH技術其實我們已經(jīng)接觸過了,在講解XML的時候,我們已經(jīng)使用過了XPATH技術了。

可以參考我之前的XML博文:http://blog.csdn.net/hon_3y/article/details/55049184

XPATH總體可分為三種搜索:

絕對路徑搜索(/根節(jié)點/子節(jié)點)

相對路徑搜索(子節(jié)點/子節(jié)點)【與絕對路徑搜索的差別就是開頭有無"/"】

全文搜索(//子節(jié)點)

如果我們要查找屬性節(jié)點、文本節(jié)點、多條件的節(jié)點是這樣寫XPATH的

屬性節(jié)點:(先找到元素節(jié)點/@屬性名)

文本節(jié)點:(先找到元素節(jié)點/test())

有條件查詢節(jié)點:(先找到元素節(jié)點/[條件])

多條件查詢節(jié)點:(先找到元素節(jié)點/條件)【兩個條件同時吻合】

多條件查詢節(jié)點:(先找到元素節(jié)點/[條件]|先找到元素節(jié)點/[條件])【或關系】

我們之前使用dom4j的時候,是調用selectSingleNode()和selectNodes()方法來獲取任意深度的節(jié)點或多個節(jié)點

我們想要在JavaScript中使用XPATH技術,那么我們也實現(xiàn)這兩個方法,調用它就行了!

selectSingleNode()

IE10,IE11下無法使用selectSingleNode()方法。解決參考:http://wenda.so.com/q/1458453513726662

但是,我沒有解決掉該問題。。。。。

下面是JavaScript代碼:

/**
 * 
 * @param xmldoc 代表的是XML的根節(jié)點
 * @param xpath 給出的XPATH表達式
 * @return 返回的是對應的節(jié)點或多個節(jié)點
 * 
 * 
 * 
 */
function selectSingleNode(xmldoc,xpath) {


    //如果是IE,IE10,IE11解決不了....會的人告訴我一聲!!
    if(navigator.userAgent.indexOf(".NET")>0) {
        var value = xmldoc.selectNodes(xpath)
        return value;

    }else {

        //如果是fireFox
        var xpathObj = new XPathEvaluator();
        var value = xpathObj.evaluate(xpath, xmldoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);

        return value.singleNodeValue;
    }

}
 

測試代碼:

    
    

    

在fireFox,Chrome瀏覽器可以正常獲取得到節(jié)點

selectNodes()

由于上面IE問題我到現(xiàn)在還沒有解決,所以下面直接測試FireFox瀏覽器了

等我復習到Jquery的時候,再把這里的坑填了吧。。。

javaScript代碼:

/**
 *
 * @param xmldoc 代表的是XML的根節(jié)點
 * @param xpath 給出的XPATH表達式
 * @return 返回的是節(jié)點數(shù)組
 */
function selectNodes(xmldoc,xpath) {

    var xpathObj = new XPathEvaluator();

    //如果是多節(jié)點,返回的是迭代器
    var iterator = xpathObj.evaluate(xpath, xmldoc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

    //把迭代器的數(shù)據(jù)寫到數(shù)組中
    var arr = new Array();

    var node;
    while ((node=iterator.iterateNext())!=null) {
        arr.push(node);
    }

    return arr;

}
 

測試代碼:

        function test() {

            var file = loadXML(true, "1.xml");

            var xpathValue = selectNodes(file, "http://aa");
            var value = xpathValue;

            alert(value);
        }

效果:

如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同學,可以關注微信公眾號:Java3y

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/110392.html

相關文章

  • DOM介紹HTML中的DOMXML中的DOM

    摘要:的的是一個內存對象樹,在瀏覽器中只保存一份,的修改的內容會直接反應到瀏覽器中對象在眼中,是由不同類型的節(jié)點組成的,這些節(jié)點都屬性對象。那么,我們需要裝載服務器的文件或字符串到中的對象。現(xiàn)在問題就是,和的裝載方式是不一樣的。 什么是DOM? DOM(Document Object Model)文檔對象模型,是語言和平臺的中立接口。。 允許程序和腳本動態(tài)地訪問和更新文檔的內容。 為什么要使...

    meislzhua 評論0 收藏0
  • DOM 小總結

    摘要:在瀏覽器中,對象是繼承自類型的一個實例,表示整個頁面。它這種情況稱為文檔碎片,還無法顯示在瀏覽器的畫面中。創(chuàng)建一個文本節(jié)點并添加到新元素中的代碼如下總結文檔對象模型,是針對和文檔的一個應用程序編程接口,描繪了一個層次化的節(jié)點樹。 DOM 是什么 文檔對象模型,是針對 HTML 和 XML 文檔的一個 API (應用程序編程接口), 描繪了一個層次化的節(jié)點樹。 D: document 當...

    hyuan 評論0 收藏0
  • DOM 小總結

    摘要:在瀏覽器中,對象是繼承自類型的一個實例,表示整個頁面。它這種情況稱為文檔碎片,還無法顯示在瀏覽器的畫面中。創(chuàng)建一個文本節(jié)點并添加到新元素中的代碼如下總結文檔對象模型,是針對和文檔的一個應用程序編程接口,描繪了一個層次化的節(jié)點樹。 DOM 是什么 文檔對象模型,是針對 HTML 和 XML 文檔的一個 API (應用程序編程接口), 描繪了一個層次化的節(jié)點樹。 D: document 當...

    yzd 評論0 收藏0
  • DOMJS高級程序設計筆記——DOM2和DOM3

    摘要:對象包含下列屬性返回整條規(guī)則對應的文本包括選擇符和花括號返回當前規(guī)則的選擇符一個對象返回規(guī)則中所有的樣式當前規(guī)則所屬的樣式表表示規(guī)則類型的常量值。從文檔中分離解除引用推薦在使用完范圍后再執(zhí)行上述兩個步驟。 DOM1級主要定義了HTML和XML文檔的底層結構,DOM2和DOM3則在DOM1的基礎上引入了更多的交互功能,支持了更高級的XML特性。DOM2和DOM3分為許多模塊(模塊之間具...

    zzir 評論0 收藏0

發(fā)表評論

0條評論

tomorrowwu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<