`
jamm19860411
  • 浏览: 86910 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

javascript之DOM技术

阅读更多
一。样式编程
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.通过隐藏层实现自定义鼠标提示的例子:
<html>
    <head>
        <title>Style Example</title>
          <script type="text/javascript" src="detect.js"></script>
        <script type="text/javascript" src="eventutil.js"></script>
        <script type="text/javascript">
            function showTip() {
                var oDiv = document.getElementById("divTip1");
                oDiv.style.visibility = "visible";
                var oEvent=EventUtil.getEvent();
                oDiv.style.left = oEvent.clientX + 5;
                oDiv.style.top = oEvent.clientY + 5;
            }

            function hideTip() {
                var oDiv = document.getElementById("divTip1");
                var oEvent=EventUtil.getEvent();
                oDiv.style.visibility = "hidden";
            }
        </script>
    </head>
    <body>
        <p>Move your mouse over the red square.</p>
        <div id="div1" 
             style="background-color: red; height: 50px; width: 50px"
             onmouseover="showTip()" onmouseout="hideTip()"></div>

         <div id="divTip1" 
              style="background-color: yellow; position: absolute; visibility: hidden; padding: 5px">
            <span style="font-weight: bold">Custom Tooltip</span><br />
            More details can go here.
         </div>
    </body>
</html>


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

4.访问样式表,因为style对象只能访问一个元素的CSS样式,而对于<style/>定义的或者外部CSS文件定义的CSS规则没办法访问,这就引出了如何访问样式表的问题。我们可以通过下面的方式访问:
var cssRules=document.styleSheets[0].cssRules||document.styleSheets[0].rules;


document.styleSheets返回页面上所有样式表的引用,标准DOM中规定每个样式表的规则集合叫cssRules,而IE中叫rules,所以我们用上面的表达式来处理浏览器兼容问题。一个访问的例子:
<html>
    <head>
        <title>Accessing Style Sheets Example</title>
        <style type="text/css">
            div.special {
                background-color: red;
                height: 10px;
                width: 10px;
                margin: 10px;
            }
        </style>
        <script type="text/javascript">
            function changeBackgroundColor() {
                var oCSSRules = document.styleSheets[0].cssRules || document.styleSheets[0].rules;
                oCSSRules[0].style.backgroundColor = "blue";
            }
        </script>
    </head>
    <body>
        <div id="div1" class="special"></div>
        <div id="div2" class="special"></div>
        <div id="div3" class="special"></div>
        
        <input type="button" value="Change Background Color" onclick="changeBackgroundColor()" />
    </body>
</html>


点击按钮时将三个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)简单选区
考虑下面的代码:
<p id="p1"><b>hello</b>world</p>


我们通过下面的JS代码来访问上面这段代码:
var oRange1=document.createRange();
var oRange2=document.createRange();
var op1=document.getElementById("p1");
oRange1.selectNode(op1);
oRange2.selectNodeContents(op1);


两个范围,通过selectNode和selectNodeContents方法来选区,有什么不同呢?oRange1选中的范围包括<p/>节点以及它的全部子节点,而oRange2只包含op1的子节点和文本节点(就是"<b>hello</b>world")。

(3)范围的特性:
<1>startContainer——范围是从哪个节点开始的,也就是第一个节点的父节点
<2>startOffset——在startContainer的偏移位置。
<3>endContainer——最后一个节点的父节点
<4>endOffset——在endContainer中范围结束的偏移位置
<5>commonAncestorContainer——startContainer和endContainer都处于哪个最小的节点
演示这些特性的例子:
<html>
    <head>
        <title>DOM Range Example</title>
        <script type="text/javascript">
            function useRanges() {
                var oRange1 = document.createRange();
                var oRange2 = document.createRange();
                var oP1 = document.getElementById("p1");
                oRange1.selectNode(oP1);
                oRange2.selectNodeContents(oP1);
                
                document.getElementById("txtStartContainer1").value = oRange1.startContainer.tagName;
                document.getElementById("txtStartOffset1").value = oRange1.startOffset;
                document.getElementById("txtEndContainer1").value = oRange1.endContainer.tagName;
                document.getElementById("txtEndOffset1").value = oRange1.endOffset;
                document.getElementById("txtCommonAncestor1").value = oRange1.commonAncestorContainer.tagName;

                document.getElementById("txtStartContainer2").value = oRange2.startContainer.tagName;
                document.getElementById("txtStartOffset2").value = oRange2.startOffset;
                document.getElementById("txtEndContainer2").value = oRange2.endContainer.tagName;
                document.getElementById("txtEndOffset2").value = oRange2.endOffset;
                document.getElementById("txtCommonAncestor2").value = oRange2.commonAncestorContainer.tagName;
            }
        </script>
    </head>
    <body><p id="p1"><b>Hello</b> World</p>
        <input type="button" value="Use Ranges" onclick="useRanges()" />        
        <table border="0">
        <tr>
            <td>
                <fieldset>
                    <legend>oRange1</legend>
                    Start Container: <input type="text" id="txtStartContainer1" /><br />
                    Start Offset: <input type="text" id="txtStartOffset1" /><br />
                    End Container: <input type="text" id="txtEndContainer1" /><br />
                    End Offset: <input type="text" id="txtEndOffset1" /><br />
                    Common Ancestor: <input type="text" id="txtCommonAncestor1" /><br />    
                </fieldset>
            </td>
            <td>
                <fieldset>
                    <legend>oRange2</legend>
                    Start Container: <input type="text" id="txtStartContainer2" /><br />
                    Start Offset: <input type="text" id="txtStartOffset2" /><br />
                    End Container: <input type="text" id="txtEndContainer2" /><br />
                    End Offset: <input type="text" id="txtEndOffset2" /><br />
                    Common Ancestor: <input type="text" id="txtCommonAncestor2" /><br />
                </fieldset>
            </td>
        </tr>
        </table>
        <p><strong>Note:</strong> This example uses DOM ranges and will only work in browsers that support DOM ranges. This example will fail in Internet Explorer.</p>

    </body>
</html>


(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 的范围并不标准,主要用来处理文本节点,调用<body/>,<button/>,<input />,<textarea>节点的createTextRange方法来创建范围,建议用 document.body.createTextRange()来创建,因为其他元素创建的范围仅能用于它们内部。
(1)简单选区:
同样以下面这段代码为例子:
<p id="p1"><b>hello</b>world</p>


要选择hello,可以使用:
var oRange=document.body.createTextRange();
oRange.findText("hello");


findText方法还可以接受第2个参数,如oRange.findText("hello",1);将选择hello之后再次找到的hello文本节点。
与DOM中的selectNode方法最相似的是IE的moveToElementText()方法,比如我们要选中p1节点以及它的所有子节点:
var oRange=document.body.createTextRange();
var oP1=document.getElementById("p1');
oRange.moveToElementText(oP1);
alert(oP1.htmlText);


另外,oRange.parentElement()返回选区的父节点。

(2)复杂选区:
move(),moveStart(),moveEnd(),expand()方法实现复杂选区,这些方法都接受两个参数:移动的单位("character","word","sentence","textedit")和移动的单位的个数。

(3)与范围交互
<1>text属性,比如oRange.text="hello";
<2>pasteHTML(),插入HTMl代码,比如oRange.pasteHTML("<em>test</em>");
<3>duplicate(),复制范围
<4>compareEndPoints() 方法,比较范围,第一个参数也是比较规则("StartToStart","StartToEnd,EndToStart","EndToEnd")和比较的范围引用。也可以通过isEqual()和isRange()方法来比较。

3.范围的常见应用,比如搜索引擎中,搜索出来的链接中的关键字用特别的颜色包围起来,另外就是网页广告比较常用。
原文:http://www.blogjava.net/killme2008/archive/2007/02/10/99135.html
分享到:
评论

相关推荐

    JavaScript_DOM编程艺术第二版(中文)

    此外,书中可能涵盖了AJAX(异步JavaScript和XML)技术,这是一种允许网页在不刷新整个页面的情况下与服务器交换数据并更新部分网页的技术。AJAX的使用极大地提升了用户体验,因为它使得网页可以进行后台通信,而...

    JavaScriptDOM编程艺术(第2版)PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一本关于JavaScript DOM编程技术的书籍——《JavaScript DOM编程艺术(第2版)》。尽管实际书籍内容并未给出,但从标题、描述及部分链接信息来看,这本书主要涉及JavaScript...

    JavaScript DOM编程艺术.pdf

    《JavaScript DOM编程艺术》是Jeremy Keith所著的一本关于JavaScript和DOM(文档对象模型)编程的经典图书,它不仅阐述了JavaScript和DOM的基本知识,还着重讲解了DOM编程技术背后的思路和原则。本书被赞誉为Web设计...

    JavaScript.DOM编程艺术(第2版)附录及源码.rar

    《JavaScript.DOM编程艺术(第2版)》是一本深入探讨JavaScript与DOM(Document Object Model)交互的权威书籍。DOM是Web开发中的核心组件,它允许程序员通过JavaScript来操作HTML和XML文档的结构、内容和样式。这本书...

    Javascript+DOM编程艺术(完整版).pdf

    Ajax(Asynchronous JavaScript and XML)是一种综合技术,其中JavaScript作为实现异步请求的核心技术之一,让网页能够无须重新加载整个页面即可更新内容,极大地提升了用户体验。 《Javascript+DOM编程艺术》的...

    JavaScript DOM编程艺术【第2版&高清】.pdf

    1. JavaScript基础知识:JavaScript是一种在浏览器中运行的脚本语言,它是实现网页动态效果和交云的核心技术之一。要精通DOM编程,首先要对JavaScript语言本身有足够的理解,包括变量、数据类型、运算符、函数、对象...

    JavaScript DOM编程艺术(第2版pdf)+源代码

    JavaScript DOM编程艺术(第2版)是一本深受程序员喜爱的JavaScript技术书籍,专注于讲解如何使用JavaScript与Document Object Model(DOM)进行交互。DOM是Web页面的结构化表示,它允许我们通过编程方式操纵HTML和XML...

    javascript Dom 编程艺术

    本书是超级畅销书的升级版,由倡导Web标准的领军人物执笔,揭示了前端开发的真谛,是学习JavaScript和DOM开发的必读之作。 本 书在简洁明快地讲述JavaScript和DOM的基本知识之后,通过几个实例演示了专业水准的网页...

    javaScript-DOM编程艺术

    JavaScript-DOM编程艺术是关于如何使用JavaScript操作网页文档对象模型(Document Object Model,简称DOM)的技术。DOM是一种标准,它提供了表示和操作HTML或XML文档的接口。通过DOM,JavaScript可以访问和修改网页...

    JavaScript & DOM Enlightenment

    JavaScript和DOM Enlightenment是关于Web开发中的核心技术的深入学习资源,主要涵盖了JavaScript编程语言以及文档对象模型(Document Object Model)的应用。这两个概念对于任何希望成为前端开发者的人来说都是至关...

    JavaScript+DOM编程艺术.pdf

    《javascript dom编程艺术:第2版》讲述了javascript、dom 和html5 的基础知识,着重介绍dom 编程技术背后的思路和原则:平稳退化、渐进增强和以用户为中心等。这些概念对于任何前端web 开发工作都非常重要。本书将...

    Beginning JavaScript with DOM Scripting and Ajax

    《初识JavaScript与DOM脚本和Ajax》这本书深入浅出地介绍了JavaScript编程、DOM操作以及Ajax技术的基础知识,是Web开发者的入门指南。JavaScript作为Web前端的核心语言,DOM(Document Object Model)则提供了对HTML...

    JavaScript+DOM编程艺术(PDF格式原版+源代码)

    JavaScript作为前端开发中不可或缺的一环,与DOM(文档对象模型)的结合使用,成为了实现这一目标的关键技术。 《JavaScript+DOM编程艺术》作为一本网络上广受欢迎的图书,以其独特的魅力吸引着来自世界各地的读者...

    JavaScript+DOM编程艺术

    《JavaScript+DOM编程艺术》是一本深入探讨JavaScript与DOM(Document Object Model)结合使用的经典教程。这本书旨在为读者提供JavaScript语言基础以及DOM操作的核心技能,同时强调了在前端Web开发中至关重要的设计...

    JavaScript DOM编程艺术(中文第2版).pdf

    javascript入门必备,本书讲述了JavaScript和DOM的基础知识,但重点放在DOM编程技术背后的思路和原则:预留退路、循序渐进和以用户为中心等,这些概念对于任何前端Web开发工作都非常重要。本书将这些概念贯穿在书中...

    JavaScript+DOM编程艺术(最新中文版)

    JavaScript+DOM编程艺术是前端开发领域的一本经典著作,它深入浅出地讲解了JavaScript语言与DOM(Document Object Model)的交互技术。DOM是Web页面的结构化表示,JavaScript则是与DOM进行互动的主要脚本语言,这...

    JavaScript.DOM编程艺术(第2版) 2-4

    《javascript dom编程艺术:第2版》讲述了javascript、dom 和html5 的基础知识,着重介绍dom 编程技术背后的思路和原则:平稳退化、渐进增强和以用户为中心等。这些概念对于任何前端web 开发工作都非常重要。本书将...

Global site tag (gtag.js) - Google Analytics