selection與range筆記


selection對象代表當前激活選中區,通常是高亮的文本塊

創建選中區:

1.拖拽文本

2.腳本創建 cerateRange()

獲取selection對象

IE     document.selection()

非IE  window.getSelection()

eg:

<div>請選中這里的部分文字。</div>
<div>
    <input type="button" value="加粗" onclick="select()" />
</div>

<script>
    function select() {
        var a = window.getSelection();
        console.log(typeof a.anchorNode);
    }
</script>

 

輸出Selection對象

屬性:

anchorNode:包含起點的節點,不存在則為null(注意一段文本就是一個節點!包括p內的文本,a,div等標簽內的文本,不包括輸入框內的文本!!

anchorOffset:起點在anchorNode中的偏移量

focusNode:包含結束點的節點,不存在則為null

focusOffset:結束點在focusNode中的偏移量,focusOffset可以比anchorOffset小,只要從后向前選擇

isCollapsed:起點和結束點是否重合

rangeCount:selection中range的數目,一般一個,ctrl鍵配合多個

 -------------------------------------------------------------------------------------------------------------------------------------

方法:

1.getRangeAt(index)

從當前selection中獲取某一個range對象

2.collapse(parentNode, offset)

開始和結束點合並到parentNode的offset位置,多用於改變可編輯div的焦點,,,

3.extend(parentNode, offset)

結束點移動到parentNode的offset位置

4.collapseToStart()

將結束點移動到selection的起點,注意是selection的起點而不是開始點,意味着只會向前不會向后,多用於取消選中狀態,多個range時也是如此

5.collapseToEnd()

將開始點移動到selection的結束點

6.selectAllChildren(parentNode)

將parentNode的所有后代變成selection,原有的selection被拋棄,可用於全選

7.addRange(range)

將range添加到selection中注意chrome中只能有一個range

8.removeRange(range)

從selection中移除range

兼容性:不佳,親測只有IE可以

9.removeAllRanges()

移除所有的range,多用於取消選擇狀態

10.toString()

返回selection的純文本,也就是返回選中區域的文本內容

11.containsNode(aNode,aPartlyContained)

判斷一個節點是不是selection的一部分

aNode要判斷的節點

aPartlyContained true 只要有一部分屬於就返回true  false 全部屬於才返回true

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

range對象:

屬性:

collapsed:此Range對象代表的區域開始點和結束點是否已合並

commonAncestorContainer:此Range對象代表的整體區域位於哪個節點(元素或一段文本)

startContainer:此Range對象的開始點位於哪個節點

startOffset:返回此Range對象代表的區域的起點在startContainer中的位置,返回整數

endContainer:此Range對象的結束點位於哪個節點

endOffset:返回此Range對象代表的區域的結束點在endContainer中的位置

 

方法:

document.createRange() 創建Range對象

Range初始化

selectNode(node) 選擇文檔的一部分

將整個node節點的信息,包括node本身填充進Range

selectNodeContents(node)

將整個弄的節點內的信息,不包括node本身,填充進Range

值得注意的是,用腳本創建Range不會像手動一樣使選中部分變藍!

操作Range

deleteContents()

從文檔中徹底刪除Range區域的內容

extractContants()

從文檔中提取Range區域的內容,返回值為提取的內容,可以對返回值進行操作,例如插入頁面其他地方

cloneRange()

復制Range區域

detach()

分類該區域

-----------------------------------------------------------------------------------------------------------------------

低版本IE兼容

創建Range (低版本IE只支持文本Range)

document.body.createRange()

初始化

findText(string)

找到第一次出現的給定文本,並將范圍移過來環繞文本。如果找到文本返回true,否則返回false.

eg: var a= document.body.createRange();

  a.findText("選中此文本");

  alert(a.text);

高版本無需此法,不多解釋

詳情請看:http://www.cnblogs.com/zourong/p/4800922.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM