Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Accessing XML children

访问 XML 子节点

JavaScript 对象通常使用 . 或 [] 来设置性质。

var a = {};
a.foo = 1;
a["bar"] = 2;

在 E4X 中,点(.)和中括号([])操作符用来访问 E4X 元素的子节点。

var element1 = <foo>
                 <bar/>
               </foo>;
var element2 = <baz/>;
element1.bar.appendChild(element2);
element1["bar"].appendChild(<quux/>);

往 element1 中的 bar 节点添加子节点,生成如下 XML 文档:

<foo>
  <bar>
    <baz/>
    <quux/>
  </bar>
</foo>

但是要注意,给一个不存在的子元素赋值会创建这个元素。

var element1 = <foo/>
element1.bar = 1;

生成

<foo>
  <bar>1</bar>
</foo>

如果子节点已经存在,点(.)操作符允许你更改它的值。

var elem = <foo>
             <bar>1</bar>
           </foo>
elem.bar = 2;

会将原来的值 1 改成 2。

你可以用 delete 命令删除一个子节点。

var elem = <foo>
             <bar/>
             <baz/>
           </foo>
delete elem.bar;

只剩下

<foo>
  <baz/>
</foo>

点(.)操作符还能用于替换特定的子节点。

var elem1 = <foo>
              <bar/>
            </foo>;
var elem2 = <red>
              <blue/>
            </red>;
elem1.bar = elem2;

用 elem2 的全部内容替换 <bar/> 元素。

<foo>
  <red>
    <blue/>
  </red>
<foo>

XML 列表

许多时候,一个元素会有两个或多个相同类型的子节点。在这种情况下,访问 foo.bar 将返回一个XML 列表对象,包含所有类型为“bar”的子节点。注意:在使用 . 操作符时,判断它是返回单个元素还是一个 XML 列表,这是你的责任。在返回这些性质时,E4X 的行为并没有区别。

XML 列表的行为就像是一个数组。

var element = <foo>
                <bar baz="1">red</bar>
                <bar baz="2">blue</bar>
              </foo>;
var list = element.bar;
list.length(); // returns 2
list[0]; // the first bar element
list[1]; // the second bar element

需要注意,这个列表时可修改的,在它上面做的修改都会反映到原始的 XML 文档中。

list[1] = "green";

XML 文档被修改为:

<foo>
  <bar baz="1">red</bar>
  <bar baz="2">green</bar>
</foo>

特殊类型的节点

XML 对象有一些方法可以访问 XML 列表中的通用类型节点。

var a = <foo> Some text <bar>not text</bar> More text </foo>;
var list = a.text();
list.length(); // returns 2
list[0]; // returns " Some text "
list[1]; // returns " More text "

你同样可以访问注释节点:

XML.ignoreComments = false;
var a = <foo> Some  <!-- abc --> text </foo>;
var comments = a.comments();
alert(comments[0]); // Returns <!-- abc -->

星号(*)选择器将返回 XML 列表的所有子节点。

var a = <foo>
          <bar/>
          <baz/>
        </foo>;
var list = a.*;
list.length(); // returns 2

元素属性

很多 XML 元素都有赋有特定值的属性。例如:

<pets>
  <dog color="brown">Fido</dog>
  <cat color="grey">Fluffy</cat>
</pets>

E4X 运行你用 .@ 操作符来反问这些特定元素的属性。最基本的情况如下例所示:

 var element = <foo bar="1"/>
 element.@bar = 2;

它将生成:

<foo bar="2"/>

文档标签和贡献者

 此页面的贡献者: ziyunfei, redraiment
 最后编辑者: ziyunfei,