range-----selection

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章