之前只是在網上摘下關於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屬性