zoukankan      html  css  js  c++  java
  • DOM(1)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <title>Index</title>
    </head>
    <body>
    <div id="d-0-0">
    <div id="d-1-1">
    <div id="d-1-1-1"></div>
    <div id="d-1-1-2"></div>
    </div>
    <div id="d-1-2"></div>
    <div id="d-1-3"></div>
    </div>
    <script type="text/javascript">

    var d = document.getElementById('d-1-1')
    var d2= document.getElementsByTagName('div')
    console.log(
    d.childNodes[0]
    )

    console.log( d.childNodes.item(1)
    )

    console.log(
    d.childNodes.length
    )

    //*************nodelist转换为数组*************
    function convertToArrary(nodes){
    var array = null;
    try{
    array = Array.prototype.slice.call(nodes,0) //针对非IE浏览器
    }catch(ex){
    array = new Array();
    for(var i=0,len=nodes.length;i<len;i++){
    array.push(nodes[i]);
    }
    }
    console.log(array)
    return array;
    }
    convertToArrary(d2)

    console.log(d.firstChild)


    /**************node类型 常用操作**************

    firstChild //第1个
    parentNode //父节点
    nextSibling //下1个
    previousSibling //上1个
    lastChild //最后1个
    childNodes //所有子节点
    d.childNodes.item(1) = d.childNodes[0]


    hasChildNodes() //节点包含1个或者多个节点情况下返回true
    ownerDocument //可返回某元素的根元素


    //*************插入节点方法: appendChild / insertBefore / replaceChild*************


    //操作节点: appendChild()
    //新增节点,用于向childeNodes列表的末尾添加一个节点。添加后,childNodes的新增节点,
    父节点以及以前的最后一个子节点的关系指针都会相应得到更新
    //更新完成后,appendChild() 返回新增的节点。
    var pElement = document.createElement("p");
    s = d.appendChild(pElement);
    console.log(s==pElement);


    /*
    returnedNode = someNode.insertBefore(newNode,null) 插入后成为最后1个节点
    alert(newNode == someNode.lastChild)
    */

    /*
    returnedNode = someNode.insertBefore(newNode,someNode.firstChild) 插入后成为第1个节点
    alert(returnedNode == newNode)
    alert(newNode == someNode.firstChild)
    */

    /*************替换 移除节点: replaceChild / removeChild *************

    //替换第1个子节点
    var returnedNode = someNode.replaceChild(newNode,someNode.firstChild);

    //替换最后1个子节点
    returnedNode = someNode.replaceChild(newNode,someNode.lastChild);

    //移除第1个子节点
    var returnedNode = someNode.removeChild(someNode.firstChild);

    //移除最后1个子节点
    returnedNode = someNode.removeChild(someNode.lastChild)

    //克隆
    cloneNode(true) 深度复制 也就是复制节点以及其整个子节点树
    cloneNode(false) 浅复制,只复制节点本身

    //mormalize() 处理文档树中的文本节点

    */

    /************Document 类型**************/

    nodeValue //null
    nodeType //9
    nodeName //#document
    parentNode //null

    var html = document.documentElement //html
    var html = document.childNodes[0]
    var html = document.firstChild

    var body = document.body

    //取得完整的URL
    document.URL

    //取得域名
    document.domain

    //取得来源的页面
    document.referrer


    ==========================================================


    /*************** document类型 查找元素 ***************/


    var c = document.forms; //这是一个 HTMLCollection 对象
    var address = c.namedItem("address"); //查找 <form name="address">
    var payment = c["payment"]; //更简单的语法:查找 <form name="payment">
    var login = c.login; //这样也是有效的:查找 <form name="login">


    对HTMLCollection而言,我们可以向方括号中传入数值或字符串形成的索引值。在后台,对数值索引的元素提供了便利。
    images['myImage'] = images.namedItem('myItem')
    images[0].src = images.item(0).src

    /*************** 查找元素 ***************/


    ==========================================================


    /************************** Element类型 **********************/
    nodeValue //null
    nodeType //1
    nodeName //标签名
    parentNode //element或者document


    /**************取得特性 getAttribute / 对象.属性***************/

    div.id // 总结在下方
    div.className
    div.title
    div.dir
    div.lang

    div.getAttribute('id')
    div.getAttribute('class')
    div.getAttribute('data-url') //underfined IE除外

    /**************设置特性 setAttribute / 对象.属性***************/

    div.setAttribute('id','someOtherId')
    div.setAttribute('class','ft')
    div.setAttribute('data-url','www.163.com')

    div.myColor = 'red'
    div.setAttribute('myColor','green') //null IE除外
    ********* DOM添加一个自定义属性,该属性不会自动成为元素的特性。
    ********* 自定义属性在IE中会被当做元素的特性。


    /**************移除 removeAttribute
    IE6及以前版本不支持
    ***************/
    div.removeAttribute()

    /************* NamedNodeMap 对象参考手册 针对单个元素
    attributes / nodeName / nodeValue / getNamedItem / setNamedItem ****************/
    var div = document.getElementById('d-0-0')
    var div2 = div.attributes.getNamedItem('id').nodeValue
    /***简写方式***/
    var div2 = div.attributes['id'].nodeValue
    console.log(div2)


    遍历出所有属性 方法 attributes[i].nodeName attributes[i].nodeValue

    /*****************总结:设置特性方法:************/
    div.id = 'nameId' //推荐
    div.getAttribute('id')
    div.setAttribute('id','someOtherId')
    div.attributes.getNamedItem('id') 等于 div.attributes['id']
    div.attributes[0]


    /****************创建元素******************/
    var div = document.createElement('div');
    div.id = 'myNewDiv';
    div.className = 'box';
    由于新元素尚未被添加到文档树中,因此设置这些特性不会影响浏览器的显示。

    document.body.appendChild(div)

    /*******仅IE支持:******/
    var div = document.createElement('<div id="myNewDiv" class="box"></div>')

    创建元素的BUG:IE7及更早的版本
    1、不能设置动态创建的iframe元素的name特性
    2、不能通过表单的reset()方法重设动态创建的input元素
    3、动态创建的type特性值为"reset"的button元素重设不了表单;
    4、动态创建一批name相同的单选按钮彼此毫无关系

    /*******IE7及以下浏览器使用:******/
    上述问题都可以通过在createElement()中指定完整的HTML标签来解决

    if(client.browser.ie && client.browser.ie <= 7){
    var iframe = document.createElement('<iframe name="myFrame"></iframe>')
    var input = document.createElement('<input type="checkbox"></input>')
    var button = document.createElement('<button type="reset"></button>')
    var radio1 = document.createElement('<input type="radio" name="choice" value="1"></button>')
    var radio2 = document.createElement('<input type="radio" name="choice" value="2"></button>')
    }
    /*******IE7及以下浏览器使用:******/

    ==========================================================

    /************ TEXT节点 ***********/

    nodeValue //文本
    nodeType //3
    nodeName //#text
    parentNode //element

    data 设置或返回元素或属性的文本

    textNode.appendData(string) //将text添加到节点的末尾

    textNode.deleteData(start,length)
    start 必需。规定从何处开始删除数据。开始值以 0 开始
    length 必需。规定删除多少个字符。

    insertData() 向节点中插入数据
    replaceData() 替换节点中的数据
    splitText() 把一个 Text 节点分割成两个。
    substringData() 方法从文本节点中获取数据。

    data 设置或返回元素或属性的文本
    length 返回元素或属性的文本长度


    1、创建文本节点

    var textNode = document.createTextNode("Hello world");
    element.appendChild(textNode)

    ======================================================
    normalize() 方法 //normalize() IE6会导致崩溃
    合并相邻的 Text 节点并删除空的 Text 节点。

    element 2个文本节点
    element.childNodes.length //2
    element.normalize();
    element.childNodes.length //1
    ======================================================

    分割文本节点
    splitText(9)

    ==========================================================


    /************** comment类型 *********************/

    nodeValue //注释内容
    nodeType //8
    nodeName //#comment
    parentNode //Element或Document
    data //设置或返回元素或属性的文本

    //创建注释节点
    var comment = document.createComment('A comment ');

    ==========================================================

    /************** CDATASection 类型 *********************/
    基于XML文档
    nodeValue //CDATA区域的内容
    nodeType //4
    nodeName //#cdata-section
    parentNode //Element或Document


    ==========================================================


    /************** DocumentType 类型 *********************/
    firefox safari opear 支持
    nodeValue //null
    nodeType //10
    nodeName //doctype的名称
    parentNode //Document

    ==========================================================

    /************** Attr 类型 *********************/
    nodeValue //特性的值
    nodeType //11
    nodeName //特性的名称
    parentNode //null

    getAttribute()
    setAttribute()
    removeAttribute()
    Attr对象属性 : name value specified
    specified 是一个布尔值,用以区别特性是在代码指定的,还是默认的。

    ==========================================================

    呈现模式
    document.compatMoe == 'CSS1Compat' //标准模式 strict mode
    document.compatMoe == 'BackCompat' //混杂模式 quirks mode

    //IE新属性
    document.documentMode

    ===========================================================

    滚动
    scrollIntoView(alignWithTop) //滚动浏览器窗口或容器元素 *所有浏览器都实现了这个方法

    scrollIntoViewIfNeeded(alignWithCenter) //只在当前元素在适口中不可见的情况下,才滚动浏览器窗口或容器元素,最终让当前元素可见。如果当前元素在视口中可见,这方法什么也不做。如果可选的alignCenter参数设置为true,则表示尽量将元素显示在视口中部(垂直方向). safari和chrome实现了这方法。

    scrollByLines(lineCount) //safari和chrome实现了这方法。

    scrollByPages(pageCount) //safari和chrome实现了这方法。

    scrollIntoView和scrollIntoViewIfNeeded作用是元素的窗口,而scrollByLines和scrollByPages影响的是元素自身。

    document.body.scrollByLines(5) //将页面主题滚动5行

    document.forms[0].scrollIntoView() //确保当前元素可见

    document.images[0].scrollIntoViewIfNeeded() //确保只在当前元素不可见的情况下使其可见

    document.body.scrollByPages(-1) //将页面主体往回滚动1页

    ======================children========================
    children属性与childNodes是相同的。
    var childCount = element.children.length;
    var firstChild = element.children[0];
    除了Firefox之外,其他浏览器都支持children集合。
    IE中的children集合会包含注释节点。

    =======================================================
    //来确定某个给定的节点是不是另一个节点的后代。
    contains //IE支持
    compareDocumentPoistion() //Firefox


    =======================================================

    innerText //永远只会生成当前节点的一个子文本节点 ********火狐不支持******
    textContent //火狐 safari opera chrome支持


    innerHTML //IE和Opera 常常把所有标签转换为大写
    而Safari、Chrome和firefox 则以文档中指定的形式返回HTML--包括空格和缩进

    innerHTML也有一些限制。首先,在多数浏览器中,通过innerHTML插入的<script>标签元素不会被执行。
    IE是唯一支持这种操作的浏览器。条件是必须指定defer特性。
    插入隐藏input为首选
    div.innerHTML='<input type="hidden"><script defer>alert(1)</script>'

    插入style做法: //查找资料 P237页 高级javascript第2版
    //针对Opear 火狐 IE
    div.innerHTML="_<style type="text/css">body{.....}</style>"
    div.removeChild(div.firstChild);
    //针对safari 和 chrome
    document.getElementsByTagName('head')[0].appendChild('div.firstChild')

    不是所有元素都有innerHTML属性。不支持innerHTML的元素有
    <col>
    <colgroup>
    <framest>
    <head>
    <html>
    <style>
    <table>
    <tbody>
    <tfoot>
    <title>
    <tr>

    =======================================================
    outerText属性 //IE safari opera chrome 支持
    读取信息与innerText一样。

    div.outerText = 'hello world!'; 相当于
    var text = document.createTextNode('hello world!');
    div.parentNode.replaceChild(text,div)

    =======================================================

    outerHTML属性 //IE safari opera chrome 支持

    =======================================================

    使用innerTEXT innerHTML outerText outerHTML 替换子节点可能会导致浏览器的内存问题,尤其是在IE中。

    =======================================================

    JavaScript添加动态脚本
    JavaScript编写动态脚本,也就是说利用JavaScript来动态的添加一段<script>代码,可以利用如下几种方式实现(主要考虑到浏览器的兼容差异):
    (1)设置url,此方法适用于所有浏览器
    var scriptEle=document.createElement("script");
    scriptEle.type="text/javascript";
    scriptEle.src=".....";
    document.body.appendChild(scriptEle);

    (2)以子节点的方式,//此方法适用于非IE以外的其他主流浏览器 *****IE不支持
    var scriptEle=document.createElement("script");
    scriptEle.type="text/javascript";
    scriptEle.appendChild(document.createTextNode("function sayHi(){alert('hi');}"););
    document.body.appendChild(scriptEle);

    (3)IE浏览器的实现方式(此方法适用于IE,Firefox,Opera和safari3.0之后的版本)
    IE浏览器里将<script>视为一个特殊的元素,不允许DOM直接访问他的子节点,但是可以通过text属性来设置
    JavaScript代码
    var scriptEle=document.createElement("script");
    scriptEle.type="text/javascript";
    scriptEle.text="function sayHi(){alert('hi');}";
    document.body.appendChild(scriptEle);

    //Safari3.0之前的版本不能正确的支持text属性
    【注意事项】由于Safari3.0之前的版本
    不能正确的支持text属性,但是允许使用文本节点来指定代码,也就是上面的第二种方法。

    (4)兼容所有浏览器的动态脚本方法如下(如果使用url建议采用第(1)种):

    function loadScript(code){
    var scriptEle=document.createElement("script");
    scriptEle.type="text/javascript";
    try{
    scriptEle.appendChild(document.createTextNode(code)); //IE不支持
    }catch(ex){
    scriptEle.text="function sayHi(){alert('hi');}"; //Safari3.0之前的版本不支持
    }
    document.body.appendChild(scriptEle);
    }

    =======================================================

    JavaScript插入动态样式

    我们以下面这个典型的<link>元素为例:
    <link rel="stylesheet" type="text/css" href="style.css">
    -----------------------------------------------------------
    使用DOM代码可以很容易的动态创建出这个元素:
    var link = document.createElement("link");
    link.rel = "stylesheet";
    link.type = "text/css";
    link.href = "style.css";
    var head = document.getElementsByTagName("head")[0];
    head.appendChild(link);

    function loadStyles(url) {
    var link = document.createElement("link");
    link.rel = "stylesheet";
    link.type = "text/css";
    link.href = url;
    var head = document.getElementsByTagName("head")[0];
    head.appendChild(link);
    }
    loadStyles("style.css")

    ---------------------------------------
    <style>
    body { background-color: red; }
    </style>

    按照相同的逻辑,下列DOM代码应该是有效的:
    //代码可以在Firefox、Safrai、Chrome和Opera中运行,在****IE****中则会报错。
    var style = document.createElement("style");
    style.type = "text/css";
    style.appendChild(document.createTextNode("body{background-color:red;}")); //IE不支持
    var head = document.getElementsByTagName("head")[0];
    head.appendChild(style);


    var style = document.createElement("style");
    style.type = "text/css";
    try {
    style.appendChild(document.createTextNode("body{background-color:red}"));
    } catch (ex) {
    style.styleSheet.cssText = "body{background-color:red}";
    }
    var head = document.getElementsByTagName("head")[0];
    head.appendChild(style);

    --------------------------------------------------------------------
    function loadStyleString(css) {
    var style = document.createElement("style");
    style.type = "text/css";
    try {
    style.appendChild(document.createTextNode(css));
    } catch (ex) {
    style.styleSheet.cssText = css;
    }
    var head = document.getElementsByTagName("head")[0];
    head.appendChild(style);
    }
    loadStyleString("body{background-color:red}");


    ============================================================

    nodeList NamedNodeMap HTMLCollection


    ============================================================

    框架和内嵌框架分别用HTMLFrameElement和HTMLIFrameElement表示,它们在DOM2级忠都有了一个新属性,
    包括所有属性和方法。Opera,Firefox和Chrome支持这个属性。
    IE8之前不支持框架中的contentDocument属性,但支持一个contentWidow的属性,该属性返回框架的window对象。
    var iframe = document.getElementById('myIframe');
    var iframeDoc = document.contentDocument || document.contentWindow.document;
    所有浏览器都支持contentWindow

    =============================================================
    JavaScript访问元素样式

    //包含着通过HTML的style特性指定的所有样式信息,但不包含与外部样式表或嵌入样式标经层叠而来的样式。
    var myDiv = document.getElementById("myDiv");
    myDiv.style.backgroundColor = "red";
    myDiv.style.width = "100px";
    myDiv.style.height = "200px";
    myDiv.style.border = "5px solid black";

    alert(myDiv.style.backgroundColor);
    alert(myDiv.style.width);
    alert(myDiv.style.height);

    CSSFloat //DOM
    styleFloat //IE

    “DOM2级样式”规范规定样式对象上相应的属性名应该是CSSFloat;Firefox、Safari、Opera和Chrom都支持这个属性,
    而IE支持的则是styleFloat。

    *************** DOM样式属性 //IE只支持cssText ****************

    //================以下只能获取到style元素中的样式 不能获取到CSS样式表里样式===================

    cssText:访问style特性中的css代码。 //获取元素style中属性
    cssText:返回整条规则对应的文本。由于浏览器对样式表的内部处理方式不同,返回的文本可能会与样式表中实际的文本不一样;Safari始终都会将文本转换成全部小写。

    myDiv.style.cssText = '25px'
    alert(myDiv.style.cssText)

    ---------------------------------------------------------------------------------------

    length: 应用给元素的css属性数量。
    item(index):返回给定位置的CSS属性的名称。

    for(var i=0;len=myDiv.style.length;i<len;i++){
    var prop = myDiv.style[i] ==== //myDiv.style.item(i) //返回所有属性名
    var value = myDiv.style.getPropertyValue(prop);
    alert(prop) 取得myDiv中样式属性的值


    var value = myDiv.style.getPropertyCSSValue(prop)
    //safarie3 chrome 支持
    //getPropertyCSSValue
    //getPropertyCSSValue返回2个属性:cssText和cssValueType
    //其中cssText的值与getPropertyValue()返回的值相同。
    //cssValueType属性则是一个数值常量,表示值的类型:0表示继承的值,1表示基本值,2表示值列表,3表示自定义值

    myDiv.style.removeProperty('border')
    //removeProperty(propertyName):从样式中删除给定属性。

    }


    parentRule:表示css信息的CSSRule对象。
    parentRule:如果当前规则是导入的规则,这个属性引用的就是导入规则;否则这个值是null。//IE不支持这个属性。

    getPropertyCSSValue(propertyName):返回包含给定属性值的CSSValue对象,
    含两个属性cssText和cssValueType。 //safarie3 chrome 支持


    getPropertyValue(propertyName):返回给定属性的字符串值 //IE不支持这个属性。


    removeProperty(propertyName):从样式中删除给定属性。 //IE不支持这个属性。

    getProperytPriority(propertyName):如果给定的属性使用了!important设置,则返回“important”,否则返回空字符串。
    setProperty(propertyName, value, priority):将给定属性设置为相应的值,并加上优先权标志(“important”或者一个空字符串)。

    style:一个CSSStyleDeclaration对象,可以通过它设置和取得规则中特定的样式值。

    type:表示规则类型的常量值。对于样式规则,这个值是1。//IE不支持这个属性。

    parentStyleSheet:当前规则所属的样式表。//IE不支持这个属性。

    selectorText:返回当前规则的寻泽扶文本。//IE不支持这个属性。

    一个 HTMLElement 的 style 属性是一个可读可写的 CSS2Properties 对象,就好像 CSSRule 对象的 style 属性一样。
    不过,Window.getComputedStyle() 的返回值是一个 CSS2Properties 对象,其属性是只读的。

    ========================================================================================


    //================ 计算后的样式是只读的 以下能获取到CSS样式表里样式==================

    var computedStyle = document.defaultView.getComputedStyle(myDiv, null); //DOM IE不支持 如果不需要伪元素信息,第二个参数可以是null。
    var computedStyle = myDiv.currentStyle; //IE


    “DOM2级样式”增强了document.defaultView,提供了getComputedStyle()方法。
    这个方法接受两个参数:要取得计算样式的元素和一个伪元素字符串(例如“:after”)。
    如果不需要伪元素信息,第二个参数可以是null。

    getComputerStyle()方法返回一个CSSStyleDeclaration对象,其中包含当前元素的所有计算的样式。以下面的HTML页面为例:
    <style>
    #myDiv {
    background-color:blue;
    100px;
    height:200px;
    }
    </style>
    <div id ="myDiv" style="background-color:red; border:1px solid black"></div>
    <script>
    var myDiv = document.getElementById("myDiv");
    var computedStyle = document.defaultView.getComputedStyle(myDiv, null);
    alert(computedStyle.backgroundColor); //"red"
    alert(computedStyle.width); //"100px"
    alert(computedStyle.height); //"200px"
    alert(computedStyle.border); //在某些浏览器中是“1px solid black”
    computedStyle.border 不会在所有浏览器中都返回值,
    但computedStyle.borderLeftWidth则会返回值。
    </script>

    需要注意的是,即使有些浏览器支持这种功能,但表示值的方式可能会有所区别。
    例如,Firefox和Safari会返回将所有颜色转换成RGB格式。
    因此,即使getComputedStyle()方法时,最好多在几种浏览器中测试一下。


    IE不支持getComputedStyle()方法,但它有一种类似的概念。
    在IE中,每个具有style属性的元素还有一个currentStyle属性。
    这个属性是CSSStyleDeclaration的实例,包含当前元素全部计算后的样式。
    取得这些样式的方法差不多,如下:
    <script type="text/javascript">
    var myDiv = document.getElementById("myDiv");
    var computedStyle = myDiv.currentStyle;
    alert(computedStyle.backgroundColor); //"red"
    alert(computedStyle.width); //"100px"
    alert(computedStyle.height); //"200px"
    alert(computedStyle.border); //undefined

    与DOM版本的方式一样,IE也没有返回border样式,因为这是一个综合属性。

    ====================================================================

    操作样式表 StyleSheets

    var supportsDOM2StyleSheets = document.implementation.hasFeature('StyleSheets','2.0')

    CSSStyleSheet继承自StyleSheet,后者可以作为一个基础接口来定义非CSS样式表。从StyleSheet接口继承而来的属性如下。

    disabled:表示样式表是否被禁用的布尔值。这个属性是可读/写的,将这个值设置为true可以禁用样式表。

    href:如果样式表是通过<link>包含的,则是样式表的URL;否则,是null。

    media:当前样式表支持的所有媒体类型的集合。与所有DOM集合一样,这个集合也有一个length属性和一个item()方法。也可以使用方括号语法取得结合中特定的项。如果集合是空列表项,表示样式表适用于所有媒体。在IE中,media是一个反映<link>和<style>元素media特性的字符串。

    ownerNode:指向拥有当前样式表的节点的指针,样式表可能是在HTML中通过<link>或<style>引入的。
    如果当前样式表是其它样式表通过@import导入的,则这个属性值为null。 //IE不支持这个属性。

    parentStyleSheet:在当前样式表是通过@import导入的情况下,这个属性是一个指向导入它的样式表的指针。

    title:ownerNode中的title属性的值。

    type:表示样式表类型的字符串。对CSS样式表而言,这个字符串是“type/css”。


    --------------------------------------------------------------------------
    除了disabled属性之外,其它属性都是只读的。在支持以上所有这些属性的基础上,CSSStyleSheet类型还支持下列属性和方法:

    cssRules:样式表中包含的样式规则的集合。//IE不支持这个属性,但有一个类似的rules属性。

    ownerRule:如果样式表是通过@import导入的,这个属性就是一个指针,指向表示导入的规则;否则,值为null。//IE不支持这个属性。

    deleteRule(index):删除cssRules集合中指定的位置的规则。//IE不支持这个方法,但支持一个类似的removeRule()方法。

    insertRule(rule,index):向cssRules集合中指定的位置插入rule字符串。//IE不支持这个方法,但支持一个类似的addRule()方法。

    -----------------------------------------------------------------------------------

    获取样式表对象

    方法一:

    应用于文档的所有样式表是通过document.styleSheets集合来表示。
    通过这个集合的length属性可以获知文档中样式表的数量,而通过方括号语法或itme()方法可以访问每一个样式表。来看一个例子:
    var sheet = null;
    for (var i = 0, len = document.styleSheets.length; i < len; i++) {
    sheet = document.styleSheets[i];
    alert(sheet.href);
    }

    同浏览器的document.styleSheets返回的样式表也不同。
    所有浏览器都会包含<style>元素和rel特性被设置为“stylesheet”的<link>元素引入的样式表。
    IE和Opera也包含rel特性被设置为“alternate stylesheet”的<link>元素引入的样式表。


    方法二:

    也可以直接通过<link>或<style>元素取得CSSStyleSheet对象。
    DOM规定了一个包含CSSStyleSheet对象的属性,名叫sheet;
    //除了IE,其它浏览器都支持这个属性。IE支持的是styleSheet属性。
    想要在不同的浏览器中都能取得样式表对象可以使用下列代码:

    function getStyleSheet(element) {
    return element.sheet || element.styleSheet; //dom:sheet IE:styleSheet
    }
    var link = document.getElementsByTagName("link")[0];
    var sheet = getStyleSheet(link);
    alert(sheet.href);
    这里的getStylesheet()返回的样式表对象与document.styleSheets集合中的样式表对象相同。

    ==================================================================================

    CSSRule对象表示样式表中的每一个规则。实际上,CSSRule是一个供其它多种类型继承的基类型,其中最常见的就是CSSStyleRule类型,表示样式信息。CSSStyleRule对象包含下列属性:

    cssText:返回整条规则对应的文本。由于浏览器对样式表的内部处理方式不同,
    返回的文本可能会与样式表中实际的文本不一样;Safari始终都会将文本转换成全部小写。//IE不支持这个属性。

    parentRule:如果当前规则是导入的规则,这个属性引用的就是导入规则;否则这个值是null。//IE不支持这个属性。

    parentStyleSheet:当前规则所属的样式表。//IE不支持这个属性。

    selectorText:返回当前规则的寻泽扶文本。

    style:一个CSSStyleDeclaration对象,可以通过它设置和取得规则中特定的样式值。

    type:表示规则类型的常量值。对于样式规则,这个值是1。//IE不支持这个属性。

    其中最常用的属性是
    csstext、
    selectorText和
    style。
    cssText属性style.cssText属性类似,
    但并不相同。前者包含选择符文本和围绕样式信息的花括号,后者只包含样式信息。
    此外,cssText是只读的,而style.cssText也可以被重写。

    ----------------------------------------------------------------------------------

    大多数情况下,仅使用style属性就可以满足所有操作样式规则的需求了。这个对象就像每个元素上的style属性一样,我们可以通过它读取和修改该规则中的样式信息。以下面的CSS规则为例:
    div.box {
    100px;
    height: 200px;
    background-color: blue;
    }

    假设这条规则位于页面中的第一个样式表中,而且这个样式表中只有这一条样式规则,那么通过下列代码可以取得这条规则的各种信息:
    var sheet = document.styleSheets[0];
    var rules = sheet.cssRules || sheet.rules; //取得规则列表
    var rule = rules[0]; //取得第一条规则
    alert(rule.selectorText); //"div.box";
    alert(rule.style.cssText); //完整的CSS代码
    alert(rule.style.backgroundColor); //"blue"
    alert(rule.style.width); //"100px"
    alert(rule.style.height); //"200px"

    </script>


    </script>
    </body>
    </html>

  • 相关阅读:
    JAVA语言编程思维入门
    C语言入门编程思维引导
    Spring入门
    Linux设置Swap虚拟内存方法
    WordPress在Centos下Apache设置伪静态方法
    Maven(十五)Maven 聚合
    Maven(十四)Maven 继承
    Maven(十三)Maven统一声明版本号
    Maven(十二)Maven 依赖详解
    Maven(十一)导入手动创建的Maven 工程
  • 原文地址:https://www.cnblogs.com/chris-oil/p/3433816.html
Copyright © 2011-2022 走看看