美文网首页
2018-12-27

2018-12-27

作者: kathyever | 来源:发表于2018-12-27 23:38 被阅读0次

    第12章 DOM2和DOM3

    DOM1级主要定义的是HTML和XML文档的底层结构。
    DOM2和DOM3则在这个结构的基础上引入了更多的交互能力,也支持了更高级的XML特性。因为,DOM2和DOM3级分为许多模块,分别描述了DOM的某个非常具体的子集:

    ◆ DOM2级核心:在1级基础上构建,为节点添加了更多方法和属性
    ◆ DOM2级视图:为文档定义了基于样式信息的不同视图
    ◆ DOM2级事件:说明了如何使用事件与DOM文档交互。
    ◆ DOM2级遍历和范围:引入了遍历DOM文档和选择其特定部分的新接口

    12.1 DOM变化

    DOM2级核心没有引入新类型,它只是在DOM1级的基础上通过增加新方法和新属性来增强了既有类型。
    DOM3级核心同样增强了既有类型,但也引入了一些新类型。

    12.1.1 针对XML命名空间的变化

    有了XML命名空间,不同XML文档的元素就可以混合在一起,共同构成格式良好的文档,而不必担心发生命名冲突
    【命名冲突:在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。】

    从技术上来说,HTML不支持XML命名空间,但是XHTML支持XML命名空间。

    命名空间要使用xmlns特性来制定。 XHTML的命名空间是http://www.w3.org/1999/xhtml,在任何格式良好XHTML页面中,都应该将其包含在<html>元素中

    <html xmlns="http://www.w3.org/1999/xhtml">
    //这样子,文档中包含的所有元素默认都视为XHTML命名空间的元素。
    

    要想明确的为XML命名空间创建前缀,可以使用xmlns后跟冒号,再跟前缀:

    <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">
            <xhtml:head>
                      <xhtml:title>Example XHTML page</xhtml:title>
              <xhtml:/head>
    
              <xhtml:body>
                      Hello world
              </xhtm:/body>
    </xhtml:html>
    

    有时候为了避免不同语言间的冲突,也需要使用命名空间来限定特性。

    <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">
            <xhtml:head>
                      <xhtml:title>Example XHTML page</xhtml:title>
              <xhtml:/head>
    
              <xhtml:body xhtml:class="home">//特性class带有一个xhtml前缀
                      Hello world
              </xhtm:/body>
    </xhtml:html>
    

    在只基于一种语言编写XML文档的情况下,命名空间实际上也没有什么用。不过,在混合使用两种语言的情况下,命名空间的用处就非常大了。

    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <time>Example XHTML page</time>
        </head>
        <body>
            <svg xmlns="http://www.w3.org/2000/svg" version="1.1"
                  viewBox="0 0 100 100" style="width:100%;height:100%">
                  <rect x="0" width="100" height="100" style="fill:red"/>
            </svg>
        </body>
    </html>
    

    设置命名空间,将<svg >标识为了与包含文档无关的元素
    此时,<svg >元素的所有子元素,以及这些元素的所有特性,都被认为属于http://www.w3.org/1999/xhtml命名空间。即使这个文档从技术上说是一个XHTML文档,但因为有了命名空间,其中的SVG代码也仍然是有效的。

    "DOM2级核心"通过为大多数DOM1级方法提供特定于命名空间的版本,解决了元素属于哪个命名空间,或者在查询特殊标签名的时候,应该将结果包含在哪个命名空间中的问题

    1、Node类型的变化

    在DOM2级中,Node类型包含系列特定于命名空间的属性:
    ◆ localName:不带命名空间前缀的节点名称
    ◆ namespaceURI:命名空间URI或者(在未指定的 情况下是)null
    ◆ prefix:命名空间前缀或者(在未指定的情况下是)null

    DOM3级在此基础上更近一步,又引入了下列与命名空间有关的方法:
    ◆ isDefaultNamespace(namespaceURI):在指定的namespaceURI是当前节点的默认命名空间的情况下返回true
    ◆ lookupNamespaceURI(prefix):返回给定prefix的命名空间
    ◆ lookupPrefix(namespaceURI):返回给定namespaceURI的前缀

    2、Document类型的变化:
    DOM2级中的Document类型也发生了变化,包含以下与命名空间有关的方法:
    ◆ createElementNS(namespaceURI,tagName):使用给定的tagName创建一个属于命名空间namespaceURI的新元素
    ◆ createAttributeNS(namespaceURI,attributeName):使用给定的attributeName创建一个属于命名空间的namespaceURI的新特性
    ◆ getElementsByTagNameNS(namespaceURI,tagName):返回属于命名空间namespaceURI的tagName元素的NodeList。

    使用这些方法时需要传入表示命名空间的URI(而不是命名空间前缀):
    //创建一个新的SVG元素
    var svg = document.createElementNS("http://www.w3.org/2000/svg","svg");

    //创建一个属于某个命名空间的 新特性
    var att = document.createAttributeNS("http://www.somewhere.com","random");

    //取得所有XHTML元素
    var elems = document.getElementsByTagNameNS("http://www.w3.org/1999/xhtml","*");

    只有在文档中存在两个或多个命名空间时,这些与命名空间有关的方法才是必须的。

    3、Element类型的变化:

    “DOM2级核心”中有关Element的变化,主要涉及操作特性

    ◆ getAttributeNS(namespaceURI,localName):取得属于命名空间namespaceURI且名为localName的特性

    ◆ getAttributeNodeNS(namespaceURI,localName):取得属于命名空间namespaceURI且名为localName的特性节点

    ◆ getElementsByTagNameNS(namespaceURI,tagName):返回属于命名空间namespaceURI的tagName元素的NodeList

    ◆ hasAttributeNS(namespaceURI,localName):确定当前元素是否有一个名为localName的特性,而且该特性的命名空间是namespaceURI。

    注意,“DOM2级核心”也增加了一个hasAttribute()方法,用于不考虑命名空间的情况

    ◆ removeAttributeNS(namespaceURI,localName):删除属于命名空间namespaceURI且名为localName的特性

    ◆ setAttributeNS(namespaceURI,qualifiedName,value):设置属于命名空间namespaceURI且名为qualifiedName的特性的值为value

    ◆ setAttributeNodeNS(attNode):设置属于命名空间的namespaceURI的特性节点

    4、NamedNodeMap类型的变化

    NamedNodeMap类型也新增了与命名有关的方法,由于特性时通过NameNodeMap表示的,因此这些方法多数情况下只针对特性使用

    ◆ getNamedItemNS(namespaceURI,localName):取得属于命名空间namespaceURI且名为localName的项

    ◆ removeNamedItemNS(namespaceURI,localName):移除属于命名空间namespaceURI且名为localName的项

    ◆ setNamedItemNS(node):添加node

    相关文章

      网友评论

          本文标题:2018-12-27

          本文链接:https://www.haomeiwen.com/subject/eiljlqtx.html