[转]createRange:ie_ff区别
firefox
irange = window.getSelection().getRangeAt(0);
ie
irange = document.selection.createRange();
我先说一下代码的目的:要获得当前用户鼠标拖选内容所在的节点类型,我个人的功能目的在于判断当前是否一个A节点,如果是,那么取得他的href。
我们先看firefox
在firefox的dom标准,定义了一个属性我们可以直接使用它来获得所选内容的父节点,同时使用nodeName来获得当前节点的类型:
irange.startContainer.nodeName;
我在firefox里面alert了一下,如果当前你所选择的是一个文本节点,那么他会返回#text,但是如果所选择的正好是一个其他节点,那么,他会返回body,这样第一步要做的就是,假如所选内容正好是一个完整的节点,那么我们来获得它的节点类型,要注意的是,startContainer返回的并不是当前节点,而是高一级的,但是在dom标准下面还提供了一个startOffset属性,如果所选择的不是一个文本节点,那么他返回的是当前节点在父节点中的偏移量,也就是offset了,我们通过它可以获得当前所选的节点:
if(irange.startContainer.nodeName != "#text"){
var nodeOffset = irange.startOffset;
var selectedNode = irange.startContainer.childNodes[nodeOffset];
}
那么我们通过selelectedNode.nodeName便可得到节点类型了。上面所说的仅仅是一种情况,还有一种情况就是用户所选择的内容是<A>标签内的文本内容的一部分,那么,虽然获得的startContainer为#text,但是他的parentNode却是一个A,那么有了上面的知识,这个问题就很容易解决了:
if(irange.startContainer.nodeName == "#text")
{
if(irange.startContainer.parentNode.nodeName == "a"){
......do sth // 那么,这里的irange.startContainer.parentNode就是那个A节点了
}
}
这是在firefox中的操作,如果我们要修改获得的那个A节点的href,那么只需要把获得的节点对象存储在一个变量中,然后直接修改他的href就可以了。
在ie下面,上面的两种情况就合二为一了,在ie中获得的range对象,不能直接使用parentNode来获得他的上级节点,而是要使用parentElement()方法的parentNode来获得
irange.parentElement().parentNode.nodeName
这样我们就可以获得它的节点类型了,在firefox中我们所说的到的两种情况使用这个方法来获得的结果都是一样,所以不需要分情况处理。
我用这个方法是用于在线编辑器,用来定义链接的,简单的办法,在ie下面可以使用execCommand("insertLink")。但是这个方法在firefox下面无效。
在这里推荐一本好书:
O'REILLY 的 <<JavaScript权威指南>>
写到这里,功能我已经写完了,但是测试的不是完全,尚不知道其中是否存在某些错误。仅作笔记之用。
以上方法通过Microsoft Internet Explorer 6.0和Mozilla Firefox 1.5的测试。
- ·AJAX跨域问题解决办..
- ·ajax问题总结
- ·jQuery dataType指定..
- ·ajax+asp.net+mssql..
- ·ajax无刷新上传文件..
- ·ajax对象abort方法
- ·JavaScript代码,变..
- ·fckeditor编辑器在F..
- flash/flex/fcs/AIR(752)
- Asp.Net/C#/WCF(598)
- 操作系统及应用软件(376)
- JavaScript/Ajax(330)
- SQL及数据库(134)
- 黑客技术(115)
- Asp/VBScript(111)
- HTML/WML/CSS兼容/XML(102)
- PHP/apache/Perl(96)
- 网站排名及优化(96)
- 其他(75)
- showbo日志(66)
- lucene.net/分词技术(33)
- 计算机网络(26)
- 机械重工(26)
- C#设计模式(25)
- Google Maps开发(17)
- 日语学习(15)
- Canvas/VML/SVG(13)
- linux(11)
- 游戏开发(8)
- 正则表达式(5)
- Jsp/Java(4)
- ·javascript实现html..
- ·Javascript风格要素..
- ·Javascript风格要素
- ·动态加载JavaScript
- ·JavaScript陷阱
- ·ajax技巧
- ·IE对CSS样式表的限制..
- ·什么是Javascript匿..
