DOM2和DOM3--(1)

206 阅读2分钟

1、DOM的变化

1、针对XML命名空间的变化

HTML不支持XML的命名空间,XHTML支持XML命名空间。

命名空间使用xmlns特性指定。XHTML页面如下:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>test</title>
    </head>
    <body>
        hello world!
    </body>
</html>

XML页面如下,xmlns后冒号,再后跟前缀

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">
    <xhtml:head>
        <xhtml:title>test</xhtml:title>
    </xhtml:head>
    <xhtml:body xhtml:class="home">
        hello world!
    </xhtml:body>
</xhtml:html>

XHTML和SVG语言的文档

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>test</title>
    </head>
    <body>
        <s:svg xmlns:s="http://www.w3.org/2000/xhtml">
            ...
        </s:svg>
    </body>
</html>
localName:不带命名空间前缀的节点名称
namespaceURI:命名空间,不指定为null
prefix:命名空间前缀,不指定为null

nodeName = prefix:localName tagName为元素实际的标签名称

let $svg = document.getElementsByTagName('html')[0];
$svg.nodeName //'s:svg'
$svg.tagName //'s:svg'
$svg.localName //'svg'
$svg.namespaceURI //'http://www.w3.org/2000/xhtml'
$svg.prefix //'s'

$svg.lookupPrefix('http://www.w3.org/2000/xhtml') //'s'
$svg.lookupNamespaceURI('s') //'http://www.w3.org/2000/xhtml'
$svg.isDefaultNamespace('http://www.w3.org/2000/xhtml') //false

2、框架的变化

let iframe = document.getElementById('myiframe');
let content = iframe.contentDocument || iframe.contentWindow.document;

注意:ie8之前不支持contentDocument属性,但是提供contentWindow.document

访问框架或内嵌框架的文档对象受到同源策略的限制

2、样式

HTML中定义样式有三种方式:

1、使用style特性定义元素内嵌式样式

let myDiv = document.getElementById('myDiv');
myDiv.style.backgroundColor = 'red'; //可写

myDiv.style.backgroundColor //'red',可以读

注意:属性设置要以驼峰,宽高加单位,float是保留字,使用cssFloat,ie则使用styleFloat

<div style="color: red;border: 1px solid #ddd;" id="myDiv"></div>

let myDiv = document.getElementById('myDiv');

myDiv.style.length //18,对于border是一个综合样式
myDiv.style.item(0) //'color',CSS属性名称
myDiv.style[0] //'color'

myDiv.style.cssText //'color: red;border: 1px solid #ddd;'
myDiv.style.cssText = 'color: red;border: 1px solid #ddd;'

myDiv.style.getPropertyPriority('border') //'',如果是!important
myDiv.style.getPropertyValue('border') //'1px solid rgb(221, 221, 221)'
myDiv.style.setProperty('border', '1px solid #ddd') 
myDiv.style.removeProperty('border') 

注意:style属性不包含从其他样式表层叠而来并影响到当前元素的样式信息

let myDiv = document.getElementById('myDiv');
document.defaultView.getComputedStyle(myDiv, null)

//ie
myDiv.currentStyle //CSSStyleDeclaration的实例

注意:由于浏览器差异,可能某个CSS属性的默认值不同

2、<style/>元素定义嵌入式样式、<link/>元素引入外部样式文件

//获取全部样式表
document.styleSheets.length 
document.styleSheets.item(0)
document.styleSheets[0]

样式表->规则