成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

lijinke666 / 2309人閱讀

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

1、E4X的類型 1.1 XML類型

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

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

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

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

var employee = 
                        Nicholas C. Zakas
                ;

2、XML 類型的toXMLString()方法會(huì)返回 XML 對(duì)象及其子節(jié)點(diǎn)的 XML 字符串表示。另一方面,該類型的 toString()方法則會(huì)基于不同 XML 對(duì)象的內(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 對(duì)象的有序集合。 XMLList 的 DOM 對(duì)等類型是 NodeList。

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

var list = new XMLList("");

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

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

2、每個(gè) XMLList 對(duì)象都有 length()方法,用于返回對(duì)象中包含的元素?cái)?shù)量。

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

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

1.3 Namespace類型

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

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

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 字符串中包含命名空間信息,那么就會(huì)自動(dòng)創(chuàng)建 Namespace 對(duì)象。然后,就可以通過前綴和namespace()方法來取得對(duì) Namespace
對(duì)象的引用。

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

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

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 對(duì)象的 toString()方法始終會(huì)返回命名空間 URI

1.4 QName類型

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

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

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

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

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

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

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

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()方法并傳入一個(gè)新 QName 對(duì)象,可以修改 XML 對(duì)象的限定名。

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

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

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

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

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

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

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

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

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

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

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

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

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

6、要?jiǎng)h除子元素,可以使用 delete 操作符

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

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

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

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 對(duì)象的特性。與 child()方法不同,使用 attribute()方法時(shí),不需要傳入帶@字符的特性名。

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

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

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

3、對(duì)特性的操作

(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é)點(diǎn)類型

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

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

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

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

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

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

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

processingInstructions(name):返回 XML 對(duì)象的所有處理指令??梢酝ㄟ^提供處理指令的 name(名稱)來過濾想要返回的結(jié)果。

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

4、使用hasSimpleContent()hasComplexContent()方法, 可以確定 XML 對(duì)象中是只包含文本,還是包含更復(fù)雜的內(nèi)容。如果 XML 對(duì)象中只包含子文本節(jié)點(diǎn),則前一個(gè)方法會(huì)返回 true;如果XML對(duì)象的子節(jié)點(diǎn)中有任何非文本節(jié)點(diǎn),則后一個(gè)方法返回 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、像下面這樣使用兩個(gè)點(diǎn),則可以進(jìn)一步擴(kuò)展查詢的深度,查詢到所有后代節(jié)點(diǎn)。

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

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

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

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

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

4、完整的特性名來替換星號(hào)達(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)中上溯,這個(gè)方法會(huì)返回一個(gè) XML 對(duì)象,表示當(dāng)前 XML 對(duì)象的父元素。如果在 XMLList 上調(diào)用 parent()方法,則會(huì)返回列表中所有對(duì)象的公共父元素。

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

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

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

(2)使用 XML 字面量;

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

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

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

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

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

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

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

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

2.5 解析和序列化

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

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

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é)點(diǎn)。默認(rèn)設(shè)置為 true。

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

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

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

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

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

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

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

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

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

2、如果只想添加一個(gè)命名空間聲明,而不想改變?cè)兀梢允褂?addNamespace()方法并傳入Namespace 對(duì)象;

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

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

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

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

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

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

3、其他變化

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

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

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

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

4、全面啟用E4X

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106159.html

相關(guān)文章

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

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

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

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

    UCloud 評(píng)論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 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記7)(函數(shù)表達(dá)式)

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

    xiaokai 評(píng)論0 收藏0
  • JavaScript 簡(jiǎn)史

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

    pubdreamcc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<