之前只是在网上摘下关于selection&range对象的方法使用,认为他们密不可分,错误的认为:range对象必须由window.getSelection().createRange()[range]或document.selection.createRange()[textRange]来生成,其实这个只是一种生成Range的方法,且这种方法是应用于用户选中一段区域。
查看文档才发现:Range对象表示文档的连续区域,如用户在浏览器窗口中用鼠标拖动选中的区域-----Range对象可以是独立存在的。而range的作用是对文档进行“任意操作”。有了range对象的帮助,selection才更加的强大。比如一般的dom的removeChild只能删除dom结点的所有孩子结点,但是利用range.deleteContents(这个函数名字记不清了),可以精确的删除dom的任何位置的孩子,达到了“精确制导”。
具体例子请看:http://blogyongnan.duapp.com/test/Range.html
ps:再看UEditor时会发现一个有意思的函数,就是range.js中经常会出现把一个“合并兄弟节点”和“拆分父节点”,这个就是把selection对象拆出,能bold而已,不知道自己的UEditor能学到多少,只是感觉能进步就好!
先是做了纠错选中内容(主要用到selection对象),然后做了留言版的功能,发现RIA不错。
---------------------------selection对象--------------------------------------
var makeASel = function(){
if(window.getSelection){//W3C
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var span = document.createElement("b");
span.style.backgroundColor="yellow";
range.surroundContents(span);
}else{//IE
var sel = document.selection.createRange();
//document.execCommand('BackColor',false,'#ff0000');
sel.pasteHTML("<span style=\"background-color: yellow;\">"+sel.htmlText+"</span>")
}
}
上面的功能是对选中文本进行更改样式操作。
当然还有很多其他操作,例如对于input中插入相应文本的功能都可以实现。可以参考inputText.selectionStart属性