js dom 详细应用教程一

 
2级DOM定义了一个createRange()方法,如果是按照DOM此标准的浏览器(IE并不是支持此标准的,但是IE里的属性或方法却远比标准中定义的多得多),它属于document对象,所以创建一个range对象要这样做:
var oRange = document.createRange();
如果你要检测你的浏览器是否支持此标准Range对象,可以用hasFeature()方法来检测:
var supportsDOMRanges = document.implementation.hasFeature("Range", "2.0");
if (supportsDOMRange) {
    var oRange = document.createRange();
    //range code here
}
Range对象进行简单的选择
最简单用Range进行选择,用selectNode()或者selectNodeContents()方法,这两个方法只有一个接收参数,一个DOM节点。
selectNode()方法选择全部节点,包括它的孩子,而selectNodeContents()选择的节点只是它的孩子。如<p id="p1"><b>Hello</b> World</p>
<script>
var oRange1 = document.createRange();
var oRange2 = document.createRange();
var oP1 = document.getElementById("p1");
oRange1.selectNode(oP1);
oRange2.selectNodeContents(oP1);
</script>
oRange1和oRange2包含上面所说的两种方法,但是看了下面的示图相信你能很快明白这两个方法的区别:
 
当你创建了一个Range对象时,Range实例就会有以下的属性:
startContainer — 返回range对象从何开始的节点对象(父节点的第一个节点)
startOffset — 返回Range开始的偏移量(offset),如果startContainer是一个文本节点,注释节点,或者是CDATA节点,这个属性返回文本的偏移量,否则返回第一个节点的索引。
endCOntainer — 返回Range对象最后一个节点对象(父节点的最后一个节点)
endOffset — 返回Range结束时的偏移量(offset)特性与startOffset相同。
commonAncestorContainer — 返回第一个包含该Range对象的节点。
注:这些属性均为只读属性(read-only),startOffset和endOffset将在下文中有较详细的解释。
下面这段代码将说明这些属性,请在Mozilla firefox里运行(支持此标准的浏览器——DOM2级,IE里将无效):<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"  />       
<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>
</body>
</html>
上面的代码将不作注释了,有什么问题,在评论中留言。
Range中还有一些其它的方法:
setStartBefore(node) — 设置Range的相对于node节点的起始位置
setStartAfter(node) — 同上
setEndBefore — 设置Range的相对于node节点的结束位置
setEndAfter — 同上

时间: 2024-10-31 03:09:36

js dom 详细应用教程一的相关文章

Android简明开发教程一:概述

自Google推出Android手机平台以来,采用Android作为平台的手机和平板电脑越来越普及.下图是2010年9月和12月三个月几 个主流智能手机平台在美国的市场占有率图表. 开发教程一:概述-"> 可以看到到2010年12月,Android市场占有率在美国已超过Apple的iPhone,而且由于 Android平台的开放性,个人认为将来它会更加普及.相当于其它常见的手机开发平台,如Java ME,Windows Mobile , BlackBerry, iPhone ,Winodw

js dom删除行和单元格,交换两行的位置

本文章提供二个关于dom操作表格的实例,我们利用了js dom来删除行和单元格,交换两行的位置哦,下面实例己经说的得很明天了. 增加删除行,表格 <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <title>www.111cn.net</title> </head> <body> <table

js dom动态添加删除表格数据的例子

学习了两天的 js dom 高级操作应用,实例代码基本上都听懂了,只是自己还没有能力全部敲出来,因为 js 操作 table 的代码太多了,js 对节点操作除了 div 之外,也可以更好的操作表单,这两天学到的是 js 如何进行对 table 的操作,当然也遇到了神奇的 js 增删改查,虽然没有用到数据库,但其效果蛮给力的,本来视频的代码想要一行一行敲下来,只是脑子里太乱了,只能从网上把视频上的代码给拷贝下来,仅供自己参考使用吧,这里的代码是关于 js 动态添加与删除表格数据的,感觉有点意思,回

js DOM操作时childNodes的空格问题解决方法

问题描述:把下面左边的四个节点一次性全部移到右边或把右边的节点一次性移到左边(>>右移,<<左移), 开始的实现是这样的: <html>   <head>     <title>MyHtml.html</title>         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">     <me

js+dom增加删除表格行代码

js+dom增加删除表格行代码 <table id="tbl" width="300" name="tbl" border="1">   <tr>     <td width="160">content</td>     <td>name</td>     <td><input type="button&qu

js dom getElementById实例教程

<html> <head> <title> js dom getElementById实例教程</title> </head> <body> <span id="span1">hello,ajax!</span> </body> </html> <script language="JavaScript" type="text/jav

js DOM innerHTML 在IE下的innerHTML属性

js DOM innerHTML 在IE下的innerHTML属性 DOM 的 createElement 方法创建 tr 和 td,然后对 td 的 innerHTML 进行相应操作,最后用 appendChild 方法把创建的元素添加到 DOM 树中.这样在 IE 下就可以正常运行了.需要注意的是,如果你的 table 没有 tbody,而是这样: 这个时候就不能对 table 直接使用 appendChild 方法了,因为IE6 下 table 元素是不支持 appendChild 方法的

深入理解JS DOM事件机制_javascript技巧

1.事件流 html 元素触发事件的顺序. 2.事件冒泡IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).3.事件捕获事件捕获的思想是不太具体的节点应该更早的接收到事件,而最具体的节点应该在最后接收到节点.事件捕获的用意在于事件到达预定目标之前捕获它. DOM事件流"DOM2级事件流"规定的事件流包括三个阶段:事件捕获阶段.处于目标阶段和冒泡阶段.首先发生的是事件捕获,为

js入门教程一(JavaScript在Ajax中的作用范例)

js入门教程一(网页特效在ajax中的作用范例) <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <title> new document </title> <style type="text/css教程"> <!-- dl   { background-color:#000;colo