亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS學(xué)習(xí)筆記(第19章)(E4X)

lijinke666 / 2363人閱讀

摘要:的類型類型創(chuàng)建對象的方法調(diào)用構(gòu)造函數(shù)使用字面量將數(shù)據(jù)直接指定給一個變量。表示解析器應(yīng)該忽略標(biāo)記中的處理指令。這三個設(shè)置會影響對傳入到構(gòu)造函數(shù)中的字符串以及字面量的解析。

1、E4X的類型 1.1 XML類型

1、創(chuàng)建XML對象的方法

(1)調(diào)用構(gòu)造函數(shù):

var x = new XML();
var x = new XML("Nicholas " +"Zakas");

(2)使用 XML 字面量將XML數(shù)據(jù)直接指定給一個變量。XML字面量就是嵌入到JavaScript代碼中的XML代碼。

var employee = 
                        Nicholas C. Zakas
                ;

2、XML 類型的toXMLString()方法會返回 XML 對象及其子節(jié)點的 XML 字符串表示。另一方面,該類型的 toString()方法則會基于不同 XML 對象的內(nèi)容返回不同的字符串。

var data = Nicholas C. Zakas;
alert(data.toString()); //"Nicholas C. Zakas"
alert(data.toXMLString()); //"Nicholas C. Zakas"
1.2 XMLList類型

XMLList 類型表現(xiàn) XML 對象的有序集合。 XMLList 的 DOM 對等類型是 NodeList。

1、創(chuàng)建XMLList對象的方法
(1)可以向其中傳入一個待解析的 XML 字符串;

var list = new XMLList("");

(2)還可以使用加號( +)操作符來組合兩個或多個 XML 對象,從而創(chuàng)建 XMLList 對象。

var list =  +  ;  //這個例子使用加號操作符組合了兩個 XML 字面量,結(jié)果得到一個 XMLList。

2、每個 XMLList 對象都有 length()方法,用于返回對象中包含的元素數(shù)量。

alert(employees.employee.length()); //2

(3)XMLList 對象的 toString()和 toXMLString()方法返回相同的字符串值,也就是將其包含的XML 對象序列化之后再拼接起來的結(jié)果。

1.3 Namespace類型

使用 Namespace 對象來表現(xiàn)命名空間。通常, Namespace 對象是用來映射命名空間前綴和命名空間 URI 的。
1、創(chuàng)建Namespace對象的方法

(1)使用 Namespace構(gòu)造函數(shù),傳入 URI 或前綴加 URI,就可以初始化 Namespace 對象

var ns = new Namespace();
var ns = new Namespace("http://www.wrox.com/"); //沒有前綴的命名空間
var wrox = new Namespace("wrox", "http://www.wrox.com/"); //wrox 命名空間

(2)通過 XML 構(gòu)造函數(shù)解析的 XML 字符串中包含命名空間信息,那么就會自動創(chuàng)建 Namespace 對象。然后,就可以通過前綴和namespace()方法來取得對 Namespace
對象的引用。

var xml = 
Hello World!
;
var wrox = xml.namespace("wrox");
alert(wrox.uri);
alert(wrox.prefix);

2、可以使用 prefix 和 uri 屬性來取得 Namespace 對象中的信息

var ns = new Namespace("http://www.wrox.com/"); //沒有前綴的命名空間
var wrox = new Namespace("wrox", "http://www.wrox.com/"); //wrox 命名空間
alert(ns.uri); //"http://www.wrox.com/"
alert(ns.prefix); //undefined
alert(wrox.uri); //"http://www.wrox.com/"
alert(wrox.prefix); //"wrox"

3、Namespace 對象的 toString()方法始終會返回命名空間 URI

1.4 QName類型

QName 類型表現(xiàn)的是 XML 對象的限定名,即命名空間與內(nèi)部名稱的組合。

1、創(chuàng)建 QName對象的方法

(1)向 QName 構(gòu)造函數(shù)中傳入名稱或 Namespace 對象和名稱,可以手工創(chuàng)建新的 QName 對象。

var wrox = new Namespace("wrox", "http://www.wrox.com/");
var wroxMessage = new QName(wrox, "message"); //表示"wrox:message"

創(chuàng)建了 QName 對象之后,可以訪問它的兩個屬性: uri 和 localName。其中,uri屬性返回在創(chuàng)建對象時指定的命名空間的 URI(如果未指定命名空間,則返回空字符串),而 localName 屬性返回限定名中的內(nèi)部名稱。

alert(wroxMessage.uri); //"http://www.wrox.com/"
alert(wroxMessage.localName); //"message"

(2)在解析 XML 結(jié)構(gòu)時,會為表示相應(yīng)元素或特性的 XML 對象自動創(chuàng)建 QName 對象??梢允褂眠@個 XML對象的name()方法取得與該XML對象關(guān)聯(lián)的 QName 對象。

var xml = < wrox:root xmlns:wrox="http://www.wrox.com/">
Hello World!
 ;
var wroxRoot = xml.name();
alert(wroxRoot.uri); //"http://www.wrox.com/"
alert(wroxRoot.localName); //"root"

2、(1)使用 setName()方法并傳入一個新 QName 對象,可以修改 XML 對象的限定名。

xml.setName(new QName("newroot"));

(2)如果該名稱不屬于任何命名空間,則可以像下面這樣使用 setLocalName()方法來修改內(nèi)部名稱。

xml.setLocalName("newtagname");
2、一般用法

1、使用點號加特性或標(biāo)簽名的方式來訪問其中不同的層次和結(jié)構(gòu)。每個子元素都是父元素的一個屬性,而屬性名與元素的內(nèi)部名稱相同。

var employee = 
Nicholas C. Zakas
;
alert(employee.name); //"Nicholas C. Zakas"、

2、如果你不確定子元素的內(nèi)部名稱,或者你想訪問所有子元素,不管其名稱是什么,也可以像下面這樣使用星號( *)

var allChildren = employees.*; //返回所有子元素,不管其名稱是什么
alert(employees.*[0].name); //"Nicholas C. Zakas"

3、還可以使用 child()方法。將屬性名或索引值傳遞給 child()方法,也會得到相同的值。

var firstChild = employees.child(0); //與 employees.*[0]相同
var employeeList = employees.child("employee"); //與 employees.employee 相同
var allChildren = employees.child("*"); //與 employees.*相同

4、為了再方便一些,還有一個children()方法始終返回所有子元素;

var allChildren = employees.children(); //與 employees.*相同

5、方法 elements()的行為與 child()類似,區(qū)別僅在于它只返回表示元素的 XML對象。

var employeeList = employees.elements("employee"); //與 employees.employee 相同
var allChildren = employees.elements("*"); //與 employees.*相同

6、要刪除子元素,可以使用 delete 操作符

elete employees.employee[0];
alert(employees.employee.length()); //1
2.1 訪問特性

1、訪問特性的三種方法:

(1)訪問特性也可以使用點語法,不過其語法稍有擴(kuò)充,必須在名稱前面加上一個@字符。

var employees = 

Nicholas C. Zakas


Jim Smith

;
alert(employees.employee[0].@position); //"Software Engineer"

(2)使用child()方法來訪問特性,只要傳入帶有@前綴的特性的名稱即可

alert(employees.employee[0].child("@position")); //"Software Engineer"

(3)使用attribute()方法并傳入特性名,可以只訪問 XML 對象的特性。與 child()方法不同,使用 attribute()方法時,不需要傳入帶@字符的特性名。

alert(employees.employee[0].attribute("position")); //"Software Engineer"

2、要取得 XML 或 XMLList 對象中的所有特性,可以使用attributes()方法。這個方法會返回一個表示所有特性的 XMLList 對象。使用這個方法與使用@*的結(jié)果相同,如下面的例子所示。

//下面兩種方式都會取得所有特性
var atts1 = employees.employee[0].@*;
var atts2 = employees.employee[0].attributes();

3、對特性的操作

(1)修改

employees.employee[0].@position = "Author"; //修改 position 特性

(2)增加

employees.employee[0].@experience = "8 years"; //添加 experience 特性
employees.employee[0].@manager = "Jim Smith"; //添加 manager 特性

(3)刪除

delete employees.employee[0].@position; //刪除 position 特性
2.2 其他節(jié)點類型

1、E4X定義了表現(xiàn)XML文檔中所有部分的類型,包括注釋和處理指令。在默認(rèn)情況上,E4X不會解析注釋或處理指令,因此這些部分不會出現(xiàn)在最終的對象層次中。如果想讓解析器解析這些部分,可以像下面這樣設(shè)置XML構(gòu)造函數(shù)的下列兩個屬性。

XML.ignoreComments = false;
XML.ignoreProcessingInstructions = false;
//在設(shè)置了這兩個屬性之后, E4X 就會將注釋和處理指令解析到 XML 結(jié)構(gòu)中。

2、使用nodeKind()方法可以得到 XML 對象表示的類型,該訪問可能會返回"text"、 "element"、 "comment"、"processinginstruction"或"attribute"。

3、可以只取得特定類型的節(jié)點,而這就要用到下列方法:

attributes():返回 XML 對象的所有特性。

comments():返回 XML 對象的所有子注釋節(jié)點。

elements(tagName):返回 XML 對象的所有子元素??梢酝ㄟ^提供元素的 tagName(標(biāo)簽名)來過濾想要返回的結(jié)果。

processingInstructions(name):返回 XML 對象的所有處理指令。可以通過提供處理指令的 name(名稱)來過濾想要返回的結(jié)果。

text():返回 XML 對象的所有文本子節(jié)點。

4、使用hasSimpleContent()hasComplexContent()方法, 可以確定 XML 對象中是只包含文本,還是包含更復(fù)雜的內(nèi)容。如果 XML 對象中只包含子文本節(jié)點,則前一個方法會返回 true;如果XML對象的子節(jié)點中有任何非文本節(jié)點,則后一個方法返回 true。來看下面的例子。

alert(employees.employee[0].hasComplexContent()); //true
alert(employees.employee[0].hasSimpleContent()); //false
alert(employees.employee[0].name.hasComplexContent()); //false
alert(employees.employee[0].name.hasSimpleContent()); //true
2.3 查詢

1、像下面這樣使用兩個點,則可以進(jìn)一步擴(kuò)展查詢的深度,查詢到所有后代節(jié)點。

var allDescendants = employees..*; //取得的所有后代節(jié)點

2、使用 descendants()方法來完成。在不給這個方法傳遞參數(shù)的情況下,它會返回所有后代節(jié)點(與使用..*相同),而傳遞一個名稱作為參數(shù)則可以限制結(jié)果。

var allDescendants = employees.descendants(); //所有后代節(jié)點
var allNames = employees.descendants("name"); //后代中的所有元素

3、可以取得所有后代元素中的所有特性,方法是使用下列任何一行代碼。

var allAttributes = employees..@*; //取得所有后代元素中的所有特性
var allAttributes2 = employees.descendants("@*"); //同上

4、完整的特性名來替換星號達(dá)到過濾特性的目的

var allAttributes = employees..@position; //取得所有 position 特性
var allAttributes2 = employees.descendants("@position"); //同上

5、除了訪問后代元素之外,還可以指定查詢的條件。

返回 position 特性值為"Salesperson"的所有元素,可以使用下面的查詢:
var salespeople = employees.employee.(@position == "Salesperson");

6、使用parent()方法能夠在 XML 結(jié)構(gòu)中上溯,這個方法會返回一個 XML 對象,表示當(dāng)前 XML 對象的父元素。如果在 XMLList 上調(diào)用 parent()方法,則會返回列表中所有對象的公共父元素。

var employees2 = employees.employee.parent();
2.4 構(gòu)建和操作XML

1、將 XML 數(shù)據(jù)轉(zhuǎn)換成XML對象的方式:

(1)將 XML 字符串傳遞到XML構(gòu)造函數(shù)中;

(2)使用 XML 字面量;

2、除了上面介紹的基本的 XML 構(gòu)建語法之外,還有一些類似 DOM 的方法,簡介如下。

appendChild(child):將給定的 child 作為子節(jié)點添加到 XMLList 的末尾。

copy():返回 XML 對象副本。

insertChildAfter(refNode, child):將 child 作為子節(jié)點插入到 XMLList 中 refNode 的后面。

insertChildBefore(refNode, child):將 child 作為子節(jié)點插入到 XMLList 中 refNode 的前面。

prependChild(child):將給定的 child 作為子節(jié)點添加到 XMLList 的開始位置。

replace(propertyName, value):用 value 值替換名為 propertyName 的屬性,這個屬性可能是一個元素,也可能是一個特性。

setChildren(children):用 children 替換當(dāng)前所有的子元素, children 可以是 XML 對象,也可是 XMLList 對象。

2.5 解析和序列化

E4X 將解析和序列化數(shù)據(jù)的控制放在了 XML 構(gòu)造函數(shù)的一些設(shè)置當(dāng)中。

1、與 XML 解析相關(guān)的設(shè)置有如下三個。

ignoreComments:表示解析器應(yīng)該忽略標(biāo)記中的注釋。默認(rèn)設(shè)置為 true。

ignoreProcessingInstructions: 表示解析器應(yīng)該忽略標(biāo)記中的處理指令。默認(rèn)設(shè)置為 true。

ignoreWhitespace:表示解析器應(yīng)該忽略元素間的空格,而不是創(chuàng)建表現(xiàn)這些空格的文本節(jié)點。默認(rèn)設(shè)置為 true。

這三個設(shè)置會影響對傳入到 XML 構(gòu)造函數(shù)中的字符串以及 XML 字面量的解析。

2、另外,與 XML 數(shù)據(jù)序列化相關(guān)的設(shè)置有如下兩個。

prettyIndent:表示在序列化 XML 時,每次縮進(jìn)的空格數(shù)量。默認(rèn)值為 2。

prettyPrinting:表示應(yīng)該以方便人類認(rèn)讀的方式輸出 XML,即每個元素重起一行,而且子元素都要縮進(jìn)。默認(rèn)設(shè)置為 true

以上五個設(shè)置都保存在 settings 對象中,通過 XML 構(gòu)造函數(shù)的 settings()方法可以取得這個對象

var settings = XML.settings();
alert(settings.ignoreWhitespace); //true
alert(settings.ignoreComments); //true

3、使用 defaultSettings()方法則可以取得一個包含默認(rèn)設(shè)置的對象,因此任何時候都可以使用下面的代碼重置設(shè)置。

XML.setSettings(XML.defaultSettings());
2.6 命名空間

1、調(diào)用 setNamespace()方法后,相應(yīng)的命名空間只會應(yīng)用到調(diào)用這個方法的元素;

2、如果只想添加一個命名空間聲明,而不想改變元素,可以使用 addNamespace()方法并傳入Namespace 對象;

3、調(diào)用 removeNamespace()方法并傳入 Namespace 對象,可以移除表示特定命名空間前綴和 URI的命名空間聲明;注意,必須傳入絲毫不差的表示命名空間的 Namespace 對象;

4、有兩個方法可以返回與節(jié)點相關(guān)的 Namespace 對象的數(shù)組: namespaceDeclarations()和inScopeNamespaces()。 namespaceDeclarations()返回在給定節(jié)點上聲明的所有命名空間的數(shù)組,inScopeNamespaces()返回位于給定節(jié)點作用域中(即包括在節(jié)點自身和祖先元素中聲明的)所有命名空間的數(shù)組。

5、使用雙冒號( ::)也可以基于 Namespace 對象來查詢 XML 結(jié)構(gòu)中具有特定命名空間的元素。例如,要取得包含在 wrox 命名空間中的所有元素,可以參考下面的代碼。

var messages = 
Hello world!
;
var wroxNS = new Namespace("wrox", "http://www.wrox.com/");
var wroxMessages = messages.wroxNS::message;

這里的雙冒號表示返回的元素應(yīng)該位于其中的命名空間。注意,這里使用的是 JavaScript 變量,而不是命名空間前綴。

6、可以為某個作用域中的所有 XML 對象設(shè)置默認(rèn)命名空間。為此,要使用 default xml namespace語句,并將一個 Namespace 對象或一個命名空間 URI 作為值賦給它。

3、其他變化

1、引入了for-each-in 循環(huán),以便迭代遍歷每一個屬性并返回屬性的值。

2、4X 還添加了一個全局函數(shù),名叫 isXMLName()。這個函數(shù)接受一個字符串,并在這個字符串是元素或特性的有效內(nèi)部名稱的情況下返回 true。在使用未知字符串構(gòu)建 XML 數(shù)據(jù)結(jié)構(gòu)時,這個函數(shù)可以為開發(fā)人員提供方便。

alert(isXMLName("color")); //true
alert(isXMLName("hello world")); //false

3、E4X 對標(biāo)準(zhǔn) ECMAScript 的最后一個修改是 typeof 操作符。在對 XML 對象或 XMLList 對象使用這個操作符時, typeof 返回字符串"xml"。但在對其他對象使用這個操作符時,返回的都是"object".

4、全面啟用E4X

要想完整地啟用 E4X,需要將

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/106159.html

相關(guān)文章

  • 高程3總結(jié)#19E4X

    摘要:在不給這個方法傳遞參數(shù)的情況下,它會返回所有后代節(jié)點與使用相同,而傳遞一個名稱作為參數(shù)則可以限制結(jié)果。,表示解析器應(yīng)該忽略標(biāo)記中的處理指令。數(shù)據(jù)序列化相關(guān)的設(shè)置,表示在序列化時,每次縮進(jìn)的空格數(shù)量。 E4X E4X的類型 E4X定義了幾個新的全局類型 XML,XML結(jié)構(gòu)中的任何一個獨立的部分 XMLList,XML對象的集合 Namespace,命名空間前綴與命名空間URI之間的映...

    DandJ 評論0 收藏0
  • JS學(xué)習(xí)筆記10)(DOM操作技術(shù))

    摘要:動態(tài)腳本創(chuàng)建動態(tài)腳本有兩種方式插入外部文件和直接插入代碼。一般來說應(yīng)該盡量減少訪問的次數(shù),因為每次訪問,都會運(yùn)行一次基于文檔的查詢。所以,可以考慮將從中取得的值緩存起來。 1、動態(tài)腳本 創(chuàng)建動態(tài)腳本有兩種方式:插入外部文件和直接插入Javascript代碼。 (1)調(diào)用外部文件 function loadScript(url) { var script = documen...

    UCloud 評論0 收藏0
  • JS學(xué)習(xí)筆記13)(事件)

    showImg(https://segmentfault.com/img/bVbvBAC?w=1534&h=912); var EventUtil = { addHandler: function(element, type, handler){ if (element.addEventListener){ element.addEventList...

    mylxsw 評論0 收藏0
  • JS學(xué)習(xí)筆記7)(函數(shù)表達(dá)式)

    摘要:遞歸閉包模仿塊級作用域私有變量小結(jié)在編程中,使用函數(shù)表達(dá)式可以無需對函數(shù)命名,從而實現(xiàn)動態(tài)編程。匿名函數(shù)也稱為拉姆達(dá)函數(shù)。函數(shù)聲明要求有名字,但函數(shù)表達(dá)式不需要。中的函數(shù)表達(dá)式和閉包都是極其有用的特性,利用它們可以實現(xiàn)很多功能。 1、遞歸 2、閉包 3、模仿塊級作用域 4、私有變量 5、小結(jié) 在JavaScript編程中,使用函數(shù)表達(dá)式可以無需對函數(shù)命名,從而實現(xiàn)動態(tài)編程。匿名函數(shù)也稱...

    xiaokai 評論0 收藏0
  • JavaScript 簡史

    摘要:正大力推進(jìn),網(wǎng)景通訊公司即將與他們達(dá)成一項協(xié)議,讓可以用在瀏覽器上。年月,網(wǎng)景通訊公司和達(dá)成協(xié)議將被重新命名為,它將會作為瀏覽器中小型客戶端任務(wù)的一種腳本語言,同時將會被提升為一種更大的開發(fā)富組件的專業(yè)工具。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事審校: 為之漫筆鏈接:http://www.zcfy.cc/article/2389原文:https://auth0.com/blog/a-...

    pubdreamcc 評論0 收藏0

發(fā)表評論

0條評論

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