JavaScript如何操作光標(biāo)和選區(qū)

這篇“JavaScript如何操作光標(biāo)和選區(qū)”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“JavaScript如何操作光標(biāo)和選區(qū)”文章吧。

創(chuàng)新互聯(lián)建站的客戶來(lái)自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜?,從?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。專(zhuān)業(yè)領(lǐng)域包括成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、電商網(wǎng)站開(kāi)發(fā)、微信營(yíng)銷(xiāo)、系統(tǒng)平臺(tái)開(kāi)發(fā)。

在一些業(yè)務(wù)場(chǎng)景,比如高亮文本、輸入編輯、等場(chǎng)景中需要對(duì)光標(biāo)和選區(qū)進(jìn)行操作時(shí),可以使用瀏覽器提供的 Selection 對(duì)象和 Range 對(duì)象來(lái)操作光標(biāo)和選區(qū)。

Selection 對(duì)象

Selection 對(duì)象表示用戶選擇的選區(qū)或插入符號(hào)的當(dāng)前位置,它可能橫跨多個(gè)元素。

//獲取 Selection 對(duì)象
window.getSelection();

用戶可能從左到右(與文檔方向相同)選擇文本或從右到左(與文檔方向相反)選擇文本。

anchor (錨點(diǎn)): 指用戶開(kāi)始選擇的地方。  
focus  (焦點(diǎn)): 指用戶結(jié)束選擇的地方。

如果你使用鼠標(biāo)選擇文本的話,anchor 就指你按下鼠標(biāo)鍵的地方,而 focus 就指你松開(kāi)鼠標(biāo)鍵的地方。anchor 和 focus 的概念不能與選區(qū)的起始位置和終止位置混淆,因?yàn)?nbsp;anchor 可能在 focus 的前面,也可能在 focus 的后面,這取決于你選擇文本時(shí)鼠標(biāo)移動(dòng)的方向,也就是按下鼠標(biāo)鍵和松開(kāi)鼠標(biāo)鍵的位置。

如下圖所示:

JavaScript如何操作光標(biāo)和選區(qū)

JavaScript如何操作光標(biāo)和選區(qū)

屬性:

  • anchorNode: 錨點(diǎn)(anchor)所在節(jié)點(diǎn)。

  • anchorOffset:

    • 如果 anchorNode 是文本節(jié)點(diǎn)、注釋節(jié)點(diǎn),返回錨點(diǎn)(anchor)到該節(jié)點(diǎn)中第一個(gè)字的字符個(gè)數(shù)。

    • 如果 anchorNode 是元素節(jié)點(diǎn),返回錨點(diǎn)(anchor)之前的同級(jí)節(jié)點(diǎn)總數(shù)。

  • focusNode: 焦點(diǎn)(focus)所在節(jié)點(diǎn)。

  • focusOffset:

    • 如果 focusNode 是文本節(jié)點(diǎn)、注釋節(jié)點(diǎn),返回焦點(diǎn)(focus)到該節(jié)點(diǎn)中的第一個(gè)字的字符個(gè)數(shù)。

    • 如果 focusNode 是元素節(jié)點(diǎn),返回焦點(diǎn)(focus)之前的同級(jí)節(jié)點(diǎn)總數(shù)。

  • isCollapsed: 表示選區(qū)的起始位置和終止位置是否重合的 Boolean 值,如果為 true,可以認(rèn)為當(dāng)前沒(méi)有內(nèi)容選中。

  • rangeCount: 選區(qū)中包含的 Range 對(duì)象數(shù)量。

  • type: 描述當(dāng)前選區(qū)的類(lèi)型,有以下三個(gè)值:

    • None: 當(dāng)前沒(méi)有選擇。

    • Caret: 僅單擊,但未選擇,選區(qū)已折疊(即光標(biāo)在字符之間,并未處于選中狀態(tài))。

    • Range: 選擇的是一個(gè)范圍。

注意:    

以上所有屬性都是只讀屬性。

方法:

  • addRange(range)

    向選區(qū)(Selection 對(duì)象)中添加一個(gè)區(qū)域( Range 對(duì)象)。

    參數(shù):

    range: 一個(gè)區(qū)域?qū)ο?/p>

    示例:
    <p id="text">文本</p>
    //添加一個(gè)選區(qū)
    var text = document.querySelector("#text");
    var selObj = window.getSelection();
    var rangeObj = document.createRange();
    rangeObj.selectNode(text);
    selObj.addRange(rangeObj);
  • collapse(parentNode,offset)

    收起當(dāng)前選區(qū)到一個(gè)點(diǎn)。文檔不會(huì)發(fā)生改變。

    參數(shù):

    parentNode: 光標(biāo)落在的目標(biāo)節(jié)點(diǎn)  
    offset: 可選,在目標(biāo)節(jié)點(diǎn)內(nèi)的偏移量

    示例:
    <div contenteditable="true" id="text">文本</div>
    //收起選區(qū)到一個(gè)點(diǎn),光標(biāo)落在一個(gè)可編輯元素上
    var text = document.querySelector("#text")
    window.getSelection().collapse(text,0);
  • collapseToEnd()

    取消當(dāng)前選區(qū),并把光標(biāo)定位在原選區(qū)的最末尾處。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    selObj.collapseToEnd();
  • collapseToStart()

    取消當(dāng)前選區(qū),并把光標(biāo)定位在原選區(qū)的最開(kāi)始處。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    selObj.collapseToStart();
  • containsNode(aNode,aPartlyContained)

    判斷指定的節(jié)點(diǎn)是否包含在 Selection 對(duì)象中(即是否被選中)。

    參數(shù):

    aNode: 用于判斷是否包含在 Selection 對(duì)象中的節(jié)點(diǎn)。  
    aPartlyContained:    
    當(dāng)此參數(shù)為 true 時(shí),Selection 對(duì)象包含 aNode 的一部分或全部時(shí),containsNode() 方法返回true。          
    當(dāng)此參數(shù)為 false (默認(rèn)值)時(shí),只有 Selection 對(duì)象完全包含 aNode 時(shí),containsNode() 方法才返回 true。

    示例:
    <div id="text">文本</div>
    var text = document.querySelector("#text");
    var selObj = window.getSelection();
    var contains = selObj.containsNode(text);
  • deleteFromDocument()

    從 DOM 中刪除選中的文檔片段。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    selObj.deleteFromDocument();
  • extend(node,offset)

    移動(dòng)選區(qū)的焦點(diǎn)(focus)到指定的點(diǎn)。選區(qū)的錨點(diǎn)(anchor)不會(huì)移動(dòng)。選區(qū)將從錨點(diǎn)(anchor)開(kāi)始到新的焦點(diǎn)(focus),不管方向。

    參數(shù):

    node: 焦點(diǎn)(focus)會(huì)被移至此節(jié)點(diǎn)內(nèi)。  
    offset:  可選,默認(rèn)值為0,焦點(diǎn)(focus)會(huì)被移至 node 內(nèi)的偏移位置。

    示例:
    <div id="text">文本</div>
    var text = document.querySelector("#text");
    var selObj = window.getSelection();
    selObj.extend(text);
  • getRangeAt(index)

    返回一個(gè)當(dāng)前選區(qū)包含的 Range 對(duì)象。

    參數(shù):

    index: 該參數(shù)指定 Range 對(duì)象的索引。如果該數(shù)值大于或等于 rangeCount ,將會(huì)報(bào)錯(cuò)。

    示例:
    //獲取一個(gè) Selection 對(duì)象
    var selObj = window.getSelection();
    //獲取一個(gè) Range 對(duì)象
    var rangeObj  = selObj.getRangeAt(0);
  • modify(alter,direction,granularity)

    通過(guò)文本命令來(lái)更改當(dāng)前選區(qū)或光標(biāo)位置。

    參數(shù):

    alter:改變類(lèi)型,傳入 move 來(lái)移動(dòng)光標(biāo)位置,或者 extend 來(lái)擴(kuò)展當(dāng)前選區(qū)。      
    direction:調(diào)整選區(qū)的方向。你可以傳入 forward 或 backward 來(lái)根據(jù)選區(qū)內(nèi)容的語(yǔ)言書(shū)寫(xiě)方向來(lái)調(diào)整?;蛘呤褂?nbsp;left 或 right 來(lái)指明一個(gè)明確的調(diào)整方向。  
    granularity:調(diào)整的距離顆粒度??蛇x值有 character、word、sentence、line、paragraphlineboundary、sentenceboundaryparagraphboundary、documentboundary。

    示例:
    var selection = window.getSelection();
    selection.modify("extend", "forward", "word");
  • removeAllRanges()

    會(huì)從當(dāng)前 Selection 對(duì)象中移除所有的 Range 對(duì)象,取消所有的選擇。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    selObj.removeAllRanges();
  • removeRange(range)

    將一個(gè) Range 對(duì)象從選區(qū)中移除。

    參數(shù):

    range: 一個(gè)將從選區(qū)中移除的 Range 對(duì)象。

    示例:
    var selObj = window.getSelection();
    var rangeObj = selObj.getRangeAt(0)
    selObj.removeRange(rangeObj);
  • selectAllChildren(parentNode)

    把指定元素的所有子元素設(shè)置為選區(qū)(該元素本身除外),并取消之前的選區(qū)。

    參數(shù):

    parentNode: 指定元素

    示例:
    <div id="selectAll">
      <div>文本1</div>
      <div>文本2</div>
    </div>
    var selectAll = document.querySelector("#selectAll");
    var selObj = window.getSelection();
    selObj.selectAllChildren(selectAll);
  • setBaseAndExtent(anchorNode,anchorOffset,focusNode,focusOffset)

    選中兩個(gè)特定 DOM 節(jié)點(diǎn)之間的內(nèi)容。

    參數(shù):

    anchorNode: 選中內(nèi)容的開(kāi)始節(jié)點(diǎn)    
    anchorOffset:選區(qū)起始位置在 anchorNode 內(nèi)的偏移量。  
    如果 anchorNode 是文本節(jié)點(diǎn),表示選區(qū)起始位置在該節(jié)點(diǎn)第幾個(gè)字符位置。  
    如果 anchorNode 是元素節(jié)點(diǎn),表示選區(qū)起始位置在該節(jié)點(diǎn)內(nèi)第幾個(gè)子節(jié)點(diǎn)的位置。      
    focusNode: 選中內(nèi)容的結(jié)束節(jié)點(diǎn)      
    focusOffset: 選區(qū)終止位置在 focusNode 內(nèi)的偏移量。      
    如果 focusNode 是文本節(jié)點(diǎn),表示選區(qū)終止位置在該節(jié)點(diǎn)第幾個(gè)字符位置。    
    如果 focusNode 是元素節(jié)點(diǎn),表示選區(qū)終止位置在該節(jié)點(diǎn)內(nèi)第幾個(gè)子節(jié)點(diǎn)的位置。

示例:
<div id="start"></div>
<div id="end"></div>
var start = document.querySelector("#start");
var end = document.querySelector("#end");
var selObj = window.getSelection();
selObj.setBaseAndExtent(start,0,end,0);
  • toString()

    返回代表當(dāng)前 Selection 對(duì)象的字符串,例如當(dāng)前選擇的文本。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    selObj.toString();

Range 對(duì)象

Range 對(duì)象表示被選中的文檔片段。一個(gè) Range 對(duì)象可能包含整個(gè)元素節(jié)點(diǎn),也可能包含元素節(jié)點(diǎn)的一部分,例如文本節(jié)點(diǎn)的一部分文字。用戶通常只能選擇一個(gè) Range 對(duì)象,但是有的時(shí)候用戶也有可能選擇多個(gè) Range 對(duì)象(只有火狐瀏覽器可以選擇多個(gè) Range 對(duì)象)。

可以用 Document 對(duì)象的 Document.createRange 方法創(chuàng)建 Range,也可以用 Selection 對(duì)象的 getRangeAt 方法獲取 Range。另外,還可以通過(guò) Document 對(duì)象的構(gòu)造函數(shù) Range() 來(lái)得到 Range。

屬性:

  • collapsed:   返回一個(gè)表示起始位置和終止位置是否相同的 Boolean 值。

  • commonAncestorContainer:   返回包含 startContainer 和 endContainer 的最深一級(jí)的節(jié)點(diǎn)。

  • endContainer:   返回包含 Range 終點(diǎn)位置的節(jié)點(diǎn)。

  • endOffset:

    • 如果 endContainer 是文本節(jié)點(diǎn)、注釋節(jié)點(diǎn),返回該節(jié)點(diǎn)第一個(gè)字到選區(qū)邊界的字符個(gè)數(shù)(即被選中的字符個(gè)數(shù))。

    • 如果 endContainer 是元素節(jié)點(diǎn),返回選區(qū)終止位置之后第一個(gè)節(jié)點(diǎn)之前的同級(jí)節(jié)點(diǎn)總數(shù)。

  • startContainer:  返回包含 Range 開(kāi)始位置的節(jié)點(diǎn)。

  • startOffset:

    • 如果 startContainer 是文本節(jié)點(diǎn)、注釋節(jié)點(diǎn),返回該節(jié)點(diǎn)第一個(gè)字到選區(qū)邊界的字符個(gè)數(shù)(即未被選中的字符個(gè)數(shù))。

    • 如果 startContainer 是元素節(jié)點(diǎn),返回選區(qū)起始位置第一個(gè)節(jié)點(diǎn)之前的同級(jí)節(jié)點(diǎn)總數(shù)。

注意:    

以上所有屬性都是只讀屬性

方法:

  • cloneContents()

    返回一個(gè)文檔片段,它是 Range 對(duì)象中所有節(jié)點(diǎn)的副本。

    參數(shù):

    無(wú)

    示例:
    // 在文檔中插入選中元素
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    documentFragment = rangeObj.cloneContents();
    document.body.appendChild(documentFragment);
  • cloneRange()

    返回一個(gè) Range 對(duì)象的副本(兩個(gè)對(duì)象各自做出改變,都不會(huì)影響另一方)。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    clone = rangeObj.cloneRange();
  • collapse(toStart)

    向開(kāi)始或結(jié)束方向折疊 Range 。

    參數(shù):

    toStart: 可選,Boolean 值(默認(rèn)值 false), true 折疊到 Range 的開(kāi)始方向,false 折疊到結(jié)束方向。

    示例:
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    rangeObj.collapse(true);
  • compareBoundaryPoints(how, sourceRange)

    比較兩個(gè) Range 對(duì)象的起始位置節(jié)點(diǎn)或結(jié)束位置節(jié)點(diǎn)。

    參數(shù):

    how 表示比較方法的常量:

      Range.END_TO_END :比較 sourceRange 對(duì)象的結(jié)束位置節(jié)點(diǎn)和原 Range 對(duì)象的結(jié)束位置節(jié)點(diǎn)。
      Range.END_TO_START :比較 sourceRange 對(duì)象的結(jié)束位置節(jié)點(diǎn)和原 Range 對(duì)象的起始位置節(jié)點(diǎn)。
      Range.START_TO_END :比較 sourceRange 對(duì)象的起始位置節(jié)點(diǎn)和原 Range 對(duì)象的結(jié)束位置節(jié)點(diǎn)。
      Range.START_TO_START :比較 sourceRange 對(duì)象的起始位置節(jié)點(diǎn)和原 Range 對(duì)象的起始位置節(jié)點(diǎn)。

    sourceRange: 一個(gè)與原 Range 對(duì)象比較的 Range 對(duì)象。

    返回值

    compare 表示一個(gè)數(shù)字:

      -1 :原 Range 對(duì)象的比較節(jié)點(diǎn)在 sourceRange 對(duì)象的比較節(jié)點(diǎn)之前  
      0 :原 Range 對(duì)象的比較節(jié)點(diǎn)在 sourceRange 對(duì)象的比較節(jié)點(diǎn)的相同位置   
      1 :原 Range 對(duì)象的比較節(jié)點(diǎn)在 sourceRange 對(duì)象的比較節(jié)點(diǎn)之后
    示例:
    <div id="range">range</div>
    <div id="sourceRange">sourceRange</div>
    var range, sourceRange, compare;
    range = document.createRange();
    range.selectNode(document.querySelector("#rang"));
    sourceRange = document.createRange();
    sourceRange.selectNode(document.querySelector("#sourceRange"));
    compare = range.compareBoundaryPoints(Range.START_TO_END, sourceRange);
  • comparePoint(referenceNode,offset)

    判斷指定節(jié)點(diǎn)是在 Range 對(duì)象的之前、相同還是之后位置。

    參數(shù):

    referenceNode: 與 Range 對(duì)象進(jìn)行比較的節(jié)點(diǎn)。  
    offset: 在 referenceNode 內(nèi)的偏移量。    
    如果 referenceNode 是文本節(jié)點(diǎn)、注釋節(jié)點(diǎn),offset 表示在該節(jié)點(diǎn)中字符的偏移位置。  
    如果 referenceNode 是元素節(jié)點(diǎn),offset 表示在該節(jié)點(diǎn)中子元素的偏移位置。

    示例:
    <div id="range">range</div>
    <div id="referenceNode">referenceNode</div>
    range = document.createRange();
    range.selectNode(document.querySelector("#range"));
    returnValue = range.comparePoint(document.querySelector("#referenceNode"), 0);
  • createContextualFragment(tagString)

    將 HTML 字符串轉(zhuǎn)換為文檔片段

    參數(shù):

    tagString: 要轉(zhuǎn)換的 HTML 字符串。

    示例:
    var tagString = "<div>node</div>";
    var range = document.createRange();
    var documentFragment = range.createContextualFragment(tagString);
    document.body.appendChild(documentFragment);
  • deleteContents()

    從 DOM 中刪除選中的文檔片段,不返回刪除的文檔片段。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    rangeObj.deleteContents();
  • extractContents()

    從 DOM 中刪除選中的文檔片段,返回刪除的文檔片段(不保留 DOM 事件)。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    rangeObj.extractContents();
  • getBoundingClientRect()

    返回一個(gè) DOMRect 對(duì)象,表示整個(gè)選區(qū)的位置信息。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    var boundingRect = rangeObj.getBoundingClientRect();
  • getClientRects()

    返回一個(gè)選區(qū)內(nèi)所有元素調(diào)用 Element.getClientRects() 方法所得結(jié)果的列表。表示選區(qū)在屏幕上所占的區(qū)域。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    var boundingRect = rangeObj.getClientRects();
  • insertNode(newNode)

    在選區(qū)開(kāi)始處插入一個(gè)節(jié)點(diǎn)。

    參數(shù):

    newNode:  需要插入的節(jié)點(diǎn)

    示例:
    <div id="insertNode">insertNode</div>
    <div id="node">node</div>
    range = document.createRange();
    newNode = document.querySelector("#node");
    range.selectNode(document.querySelector("#insertNode"));
    range.insertNode(newNode);
  • intersectsNode(referenceNode)

    返回一個(gè) Boolean 值,判斷指定節(jié)點(diǎn)和 Range 對(duì)象是否相交。

    參數(shù):

    referenceNode:需要比較的節(jié)點(diǎn)

    示例:
    <div id="referenceNode">referenceNode</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    referenceNode = document.querySelector("#referenceNode");
    rangeObj.intersectsNode(referenceNode);
  • isPointInRange(referenceNode,offset)

    返回一個(gè) Boolean 值,判斷指定節(jié)點(diǎn)是否在 Range 對(duì)象內(nèi)。

    參數(shù):

    referenceNode:指定節(jié)點(diǎn)  
    offset:在 referenceNode 內(nèi)的偏移量。    
    如果 referenceNode 是文本節(jié)點(diǎn),offset 表示在該節(jié)點(diǎn)中字符的偏移位置。    
    如果 referenceNode 是元素節(jié)點(diǎn),offset 表示在該節(jié)點(diǎn)中子元素的偏移位置。

    示例:
    <div id="referenceNode">referenceNode</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    referenceNode = document.querySelector("#referenceNode");
    rangeObj.isPointInRange(referenceNode,0);
  • selectNode(referenceNode)

    將指定節(jié)點(diǎn)包含在 Range 對(duì)象內(nèi)。

    參數(shù):

    referenceNode:指定節(jié)點(diǎn)

    示例:
    <div id="referenceNode">referenceNode</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    referenceNode = document.querySelector("#referenceNode");
    rangeObj.selectNode(referenceNode);
  • selectNodeContents(referenceNode)

    將指定節(jié)點(diǎn)的內(nèi)容包含在 Range 對(duì)象內(nèi)。

    參數(shù):

    referenceNode:指定節(jié)點(diǎn)

    示例:
    <div id="referenceNode">referenceNode</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    referenceNode = document.querySelector("#referenceNode");
    rangeObj.selectNodeContents(referenceNode);
  • setEnd(endNode,endOffset)

    設(shè)置選區(qū)的終止位置。

    參數(shù):

    endNode:終止位置所在的節(jié)點(diǎn)    
    endOffset:在 endNode 內(nèi)的偏移量。  
    如果 endNode 是文本節(jié)點(diǎn)、注釋節(jié)點(diǎn),endOffset 表示在該節(jié)點(diǎn)中字符的偏移位置。  
    如果 endNode 是元素節(jié)點(diǎn),endOffset 表示在該節(jié)點(diǎn)中子元素的偏移位置。

    示例:
    <div id="endNode">endNode</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    var endNode = document.querySelector("#endNode");
    rangeObj.setEnd(endNode,0)
  • setEndAfter(referenceNode)

    設(shè)置選區(qū)的結(jié)束位置在指定節(jié)點(diǎn)之后。

    參數(shù):

    referenceNode:指定節(jié)點(diǎn)

    示例:
    <div id="referenceNode">referenceNode</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    var referenceNode = document.querySelector("#referenceNode");
    rangeObj.setEndAfter(referenceNode)
  • setEndBefore(referenceNode)

    設(shè)置選區(qū)的結(jié)束位置在指定節(jié)點(diǎn)之前。

    參數(shù):

    referenceNode:指定節(jié)點(diǎn)

    示例:
    <div id="referenceNode">referenceNode</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    var referenceNode = document.querySelector("#referenceNode");
    rangeObj.setEndBefore(referenceNode)
  • setStart(startNode,startOffset)

    設(shè)置選區(qū)的起始位置。

    參數(shù):

    startNode:起始位置所在的節(jié)點(diǎn)    
    startOffset:在 startNode 內(nèi)的偏移量。  
    如果 startNode 是文本節(jié)點(diǎn)、注釋節(jié)點(diǎn),startOffset 表示在該節(jié)點(diǎn)中字符的偏移位置。  
    如果 startNode 是元素節(jié)點(diǎn),startOffset 表示在該節(jié)點(diǎn)中子元素的偏移位置。

    示例:
    <p id="startNode">startNode</p>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    startNode = document.querySelector("#startNode");
    rangeObj.setStart(startNode,0)
  • setStartAfter(referenceNode)

    設(shè)置選區(qū)的起始位置在指定節(jié)點(diǎn)之后。

    參數(shù):

    referenceNode:指定節(jié)點(diǎn)

    示例:
    <div id="startNode">startNode</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    referenceNode = document.querySelector("#referenceNode");
    rangeObj.setStartAfter(referenceNode)
  • setStartBefore(referenceNode)

    設(shè)置選區(qū)的起始位置在指定節(jié)點(diǎn)之前。

    參數(shù):

    referenceNode:指定節(jié)點(diǎn)

    示例:
    <div id="referenceNode">referenceNode</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    referenceNode = document.querySelector("#referenceNode");
    rangeObj.setStartBefore(referenceNode)
  • surroundContents(newParent)

    把指定節(jié)點(diǎn)插入選區(qū)的起始位置,然后把指定節(jié)點(diǎn)的內(nèi)容替換為選區(qū)的內(nèi)容。

    參數(shù):

    newParent:指定節(jié)點(diǎn)

    示例:
    <div id="newParent">newParent</div>
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    newParent = document.querySelector("#newParent");
    rangeObj.surroundContents(newParent)
  • toString()

    返回代表當(dāng)前 Range 對(duì)象的字符串,例如當(dāng)前選擇的文本。

    參數(shù):

    無(wú)

    示例:
    var selObj = window.getSelection();
    var rangeObj  = selObj.getRangeAt(0);
    var rangeStr = rangeObj.toString();

選區(qū)中的多個(gè)區(qū)域

一個(gè) Selection 對(duì)象表示用戶選擇的區(qū)域(Range 對(duì)象)的集合,通常它只包含一個(gè)區(qū)域,訪問(wèn)方式如下:

//獲取一個(gè) Selection 對(duì)象
var selObj = window.getSelection();
//獲取一個(gè) Range 對(duì)象
var rangeObj  = selObj.getRangeAt(0);

只有火狐瀏覽器實(shí)現(xiàn)了多個(gè)區(qū)域,如下圖所示:

JavaScript如何操作光標(biāo)和選區(qū)

修改選區(qū)樣式

使用 ::selection 選擇器可以匹配被選中的部分。  
目前只有一小部分 CSS 屬性可以用于 ::selection 選擇器:

  • color

  • background-color

  • text-shadow

示例

JavaScript如何操作光標(biāo)和選區(qū)

以上就是關(guān)于“JavaScript如何操作光標(biāo)和選區(qū)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

名稱(chēng)欄目:JavaScript如何操作光標(biāo)和選區(qū)
分享URL:http://muchs.cn/article34/gphpse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、App設(shè)計(jì)商城網(wǎng)站、Google、網(wǎng)站收錄品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)