javascript之DOM技术(二)

  1. 2008-06-22 @ Tag javascript   人气:1

    一。样式编程
    1.页面中的每一个元素都具有一个style对象,此对象管理元素的CSS样式。这是在IE4.0引入的,后来作为DOM标准被接受。使用方法:
    var oDiv=document.getElementById("div1");
    alert(oDiv.style.backgroundColor);
    style对象拥有一个cssText属性,返回描述元素样式的CSS字符串。

    2.样式对象style的方法(IE6并不支持这些方法):
    (1)getPropertyValue(propertyName)——返回CSS特性propertName的字符串值,比如this.style.getPropertyValue("background-color");这里的propertyName必须按照CSS的样式定义。

    (2)getPropertyPriority()——返回important字符串或者为空
    (3)item(index)——返回给定索引处的CSS特性名称
    (4)removeProperty(propertyName)——移除某CSS特性
    (5)setProperty(propertyName,value,priorty)——按照执行优先级设定CSS特性的值

    3.通过隐藏层实现自定义鼠标提示的例子:

        
            
              
            
            
        
        
            

    Move your mouse over the red square.


            
                  style="background-color: red; height: 50px; width: 50px"
                  onmouseover="showTip()" onmouseout="hideTip()">

             

                   style="background-color: yellow; position: absolute; visibility: hidden; padding: 5px">
                 Custom Tooltip

                 More details can go here.
             

        

    这里使用了我在《javascript事件模型框架》中摘记的JS文件。实现可折叠区域的道理与此相同,很常用的功能,不再细说。

    4.访问样式表,因为style对象只能访问一个元素的CSS样式,而对于
            
        
        
            


            

            

            
            
        

    点击按钮时将三个div的背景色都设置为蓝色。

    5.最终样式:顾名思义,就是样式规则(外部定义和内联的)综合计算之后呈现给用户的样式信息,用来告诉我们元素最终是如何显示在屏幕上的。IE和标准的DOM也有区别:
    (1)IE中的最终样式称为currentStyle对象,与style对象不同的是它是只读的,你只能读而不能给它赋值。
    (2)DOM中的最终样式,通过document.defaultView.getComputedStyle(元素对象,伪元素对象或者null)方法获得

    二。innerHTML和innerText
    很常用的功能,特别是在AJAX应用中,经常采用的手段是从服务端返回一小段HTML代码,通过innerHTML嵌入某个层当中来动态显示下拉框等。一个比较常见的用法:
    oDiv.innertText=oDiv.innerText;
    表示从指定元素中删除所有的HTML标签。

    三。outerText和outerHTML

    与innerHTML和innerText,不过替换的是整个目标节点,仅在IE和opera中支持此特性

    四。范围
    叫选区也许更为恰当,range用来选择文档的某个部分而不管节点的边界。也有两种的范围实现:DOM和IE的
    1.DOM的range
    (1)在DOM中创建选区的方法:
    var supportDOMRange=document.implementation.hasFeature("Range","2.0");
    if(supportDOMRange)
       var oRange=document.createRange();
    先判断是否支持DOM,然后使用createRange()方法创建范围

    (2)简单选区
    考虑下面的代码:

    helloworld


    我们通过下面的JS代码来访问上面这段代码:
    var oRange1=document.createRange();
    var oRange2=document.createRange();
    var op1=document.getElementById("p1");
    oRange1.selectNode(op1);
    oRange2.selectNodeContents(op1);
    两个范围,通过selectNode和selectNodeContents方法来选区,有什么不同呢?oRange1选中的范围包括

    节点以及它的全部子节点,而oRange2只包含op1的子节点和文本节点(就是"helloworld")。

    (3)范围的特性:
    <1>startContainer——范围是从哪个节点开始的,也就是第一个节点的父节点
    <2>startOffset——在startContainer的偏移位置。
    <3>endContainer——最后一个节点的父节点
    <4>endOffset——在endContainer中范围结束的偏移位置
    <5>commonAncestorContainer——startContainer和endContainer都处于哪个最小的节点
    演示这些特性的例子:

        
            
            
        
        

    Hello World


                     
            
            
                
                
            
            

                    

                         oRange1
                         Start Container:

                         Start Offset:

                         End Container:

                         End Offset:

                         Common Ancestor:
        
                    

                

                    

                         oRange2
                         Start Container:

                         Start Offset:

                         End Container:

                         End Offset:

                         Common Ancestor:

                    

                

            

    Note: This example uses DOM ranges and will only work in browsers that support DOM ranges. This example will fail in Internet Explorer.

        

    (4)复杂选区
    通过setStart和setEnd来实现复杂选区,两个方法都接受两个参数:节点引用和偏移量。

    (5)与范围对象的交互
    <1>deleteContents(),删除范围内容
    <2>extractContents,与deleteContents()相似,只不过返回被删除的文档碎片
    <3>cloneContents(),创建范围内容副本
    <4>surroundContents(node),插入包围范围的内容
    <5>insertNode(node),在选区开头插入节点
    <6>cloneRange(),复制范围
    <7>detach(),释放系统资源
    <8>compareBoundaryPoints()方法,比较范围,两个参数,一个比较规则(Range.START_START,Range.START_TO_END,Range.END_TO_START,Range.END_TO_END),一个是比较的范围引用


    2.IE中的范围
    IE的范围并不标准,主要用来处理文本节点,调用,