国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

你可能不知道的JS關(guān)于選中文本區(qū)域的操作

0xE7A38A / 1382人閱讀

摘要:先普及一些關(guān)于文本選擇范圍的基礎(chǔ)知識(shí)。可以調(diào)用的方法,結(jié)果就會(huì)打印出我們選擇的文本內(nèi)容。用腳本可以實(shí)現(xiàn)中包含多個(gè)的情況。表示當(dāng)前范圍是否是閉合的。則表示當(dāng)前范圍的起始和結(jié)束是同一個(gè)位置。表示共同的祖先節(jié)點(diǎn)。

聲明:今天所分享的內(nèi)容,都可以直接在控制臺(tái)演示。
先來思考幾個(gè)問題。
1.我在一個(gè)頁面中隨意點(diǎn)了一下,沒有留下任何痕跡。你能捕捉到我剛才點(diǎn)的是哪個(gè)節(jié)點(diǎn),以及鼠標(biāo)的落腳點(diǎn)在哪兩個(gè)字之間嗎(點(diǎn)擊圖片是無效的,本文只討論文本的情況)?
2.如何做到點(diǎn)擊任意節(jié)點(diǎn),選中并且復(fù)制任意一段文字呢?
3.如何用腳本控制你用鼠標(biāo)選中的區(qū)域呢(控制所選范圍的大小,起始位置)?

上面三個(gè)問題,你能答出幾道?這幾個(gè)問題都是跟當(dāng)前選擇區(qū)域相關(guān)的知識(shí)點(diǎn),這里我們合并在一起講一下。先普及一些關(guān)于文本選擇范圍的基礎(chǔ)知識(shí)。主要涉及到兩個(gè)對(duì)象,Selection和Range??梢岳斫獬蒘election由Range組成,Selection表示當(dāng)前頁面中鼠標(biāo)選中的區(qū)域?qū)ο螅梢杂脀indow.getSelection()來獲取Selection對(duì)象,你可以用鼠標(biāo)在當(dāng)前頁選取一個(gè)范圍,然后打開控制臺(tái),輸入window.getSelection()即可打印出Selection對(duì)象??梢哉{(diào)用selection的toString方法,結(jié)果就會(huì)打印出我們選擇的文本內(nèi)容。
let selection = window.getSelection();
console.log(selection.toString());

selection有一個(gè)rangeCount屬性,用來判斷當(dāng)前選擇區(qū)域有多少個(gè)range,重點(diǎn)來了:當(dāng)進(jìn)入一個(gè)網(wǎng)頁,或者刷新當(dāng)前頁之后,如果你沒有點(diǎn)擊過任何地方,則selection的rangeCount值為0,一旦你點(diǎn)擊過任何地方,此時(shí)rangCount的值就變成了1(此時(shí)你就可以打開控制臺(tái)在控制臺(tái)測(cè)試了)。所以這就可以用來判斷當(dāng)前頁有沒有被點(diǎn)擊過。

let selection = window.getSelection();
if (selection.rangeCount == 0) {
  console.log("當(dāng)前頁面還沒有被點(diǎn)擊過");
} else {
  console.log("當(dāng)前頁面已經(jīng)被點(diǎn)擊過");
// 獲取當(dāng)前selection中的range。(在網(wǎng)頁中通過手動(dòng)去選擇范圍只能有一個(gè)range。用腳本可以實(shí)現(xiàn)selection中包含多個(gè)range的情況。)
  let range = selection.getRangeAt(0); 
}

當(dāng)我們知道當(dāng)前頁面被點(diǎn)擊過之后,就可以來判斷是哪個(gè)節(jié)點(diǎn)被點(diǎn)擊了。點(diǎn)擊了哪兩個(gè)字的中間。此時(shí)就會(huì)用到幾個(gè)range的屬性,分別是startContainer,endContainer,startOffset,endOffset.先來看控制臺(tái)打印出來的幾個(gè)range的屬性。

collapsed:表示當(dāng)前range范圍是否是閉合的。true則表示當(dāng)前range范圍的起始和結(jié)束是同一個(gè)位置。其實(shí)就是當(dāng)前頁面上沒有被選擇的范圍。也可以認(rèn)為當(dāng)前選擇范圍是一個(gè)點(diǎn)。
commonAncestorContainer: 表示共同的祖先節(jié)點(diǎn)。如果當(dāng)前選擇范圍是跨節(jié)點(diǎn)的,即我的開始點(diǎn)是在上一個(gè)div,結(jié)束點(diǎn)在他的兄弟節(jié)點(diǎn)div中。那此時(shí)commonAncestorContainer就表示他倆的父節(jié)點(diǎn)(最近的公共祖先節(jié)點(diǎn))。如果開始點(diǎn)和結(jié)束點(diǎn)在同一個(gè)div中,則此屬性的值指向當(dāng)前div。
startContainer/endContainer: 范圍起始點(diǎn)和結(jié)束點(diǎn)所在的節(jié)點(diǎn)中。
startOffset/endOffset: 范圍起始點(diǎn)和結(jié)束點(diǎn)在當(dāng)前container中的偏移量,即在startContainer(或endContainer)中,起始點(diǎn)(或結(jié)束點(diǎn))前面有多少個(gè)字。

結(jié)合上面的四個(gè)屬性,我們就能輕易的找到剛才點(diǎn)擊的哪個(gè)位置,(如果只是點(diǎn)擊一下的話,collapsed值為true,startContainer和endContainer相同,startOffset和endOffset相等)到這里,我們開篇提到的第一個(gè)問題就解決了。
第一個(gè)問題理解了之后,后面的兩個(gè)就變的很簡(jiǎn)單了。我們先來看第三個(gè),只是用range的幾個(gè)方法。設(shè)置一下range的邊界值即可。

setStartAfter()
setStartBefore()
setEndAfter()
setEndBefore()
// 上面這四個(gè)方法是設(shè)置range范圍的起始和結(jié)束位置的,參數(shù)傳入節(jié)點(diǎn)即可。
setStart()
setEnd()
// 上面這兩個(gè)方法有兩個(gè)參數(shù),第一個(gè)傳入節(jié)點(diǎn),第二個(gè)傳入偏移量,即從當(dāng)前節(jié)點(diǎn)的第幾個(gè)字開始。注意:這里的節(jié)點(diǎn)指的是文本節(jié)點(diǎn)(nodeType是3的text節(jié)點(diǎn))。

下面看第二個(gè)問題。首先選中一段文字,然后執(zhí)行復(fù)制命令。

// 選中一段文字
let div = document.getElementById("div");
let selection = window.getSelection();
let range = document.createRange();
range.selectNode(div);
selection.removeAllRanges();
selection.addRange(range);
// 執(zhí)行復(fù)制命令
document.execCommand("copy", false, null);

這里用到了一個(gè)很好用的方法,document.execCommand(),感興趣的朋友自己下來查一下吧。
不管你是小哥哥還是小姐姐,覺得東西不錯(cuò)?給個(gè)贊再走吧!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/54274.html

相關(guān)文章

  • 可能知道JS關(guān)于選中本區(qū)操作

    摘要:先普及一些關(guān)于文本選擇范圍的基礎(chǔ)知識(shí)。可以調(diào)用的方法,結(jié)果就會(huì)打印出我們選擇的文本內(nèi)容。用腳本可以實(shí)現(xiàn)中包含多個(gè)的情況。表示當(dāng)前范圍是否是閉合的。則表示當(dāng)前范圍的起始和結(jié)束是同一個(gè)位置。表示共同的祖先節(jié)點(diǎn)。 聲明:今天所分享的內(nèi)容,都可以直接在控制臺(tái)演示。先來思考幾個(gè)問題。1.我在一個(gè)頁面中隨意點(diǎn)了一下,沒有留下任何痕跡。你能捕捉到我剛才點(diǎn)的是哪個(gè)節(jié)點(diǎn),以及鼠標(biāo)的落腳點(diǎn)在哪兩個(gè)字之間嗎...

    lauren_liuling 評(píng)論0 收藏0
  • [譯]OpenCV OCR and text recognition with Tesseract

    摘要:納入深度學(xué)習(xí)模型來進(jìn)一步提升準(zhǔn)確率只是時(shí)間問題,事實(shí)上,這個(gè)時(shí)間已經(jīng)到來。最新版本支持基于深度學(xué)習(xí)的,準(zhǔn)確率顯著提高。該函數(shù)使用基于深度學(xué)習(xí)的文本檢測(cè)器來檢測(cè)不是識(shí)別圖像中的文本區(qū)域。高效使用概率最高的文本區(qū)域,刪除其他重疊區(qū)域。 By Adrian Rosebrock on September 17, 2018 in Deep Learning, Optical Character ...

    gnehc 評(píng)論0 收藏0
  • [譯]OpenCV Text Detection (EAST text detector)

    摘要:的文本檢測(cè)器是一種基于新穎架構(gòu)和訓(xùn)練模式的深度學(xué)習(xí)模型。深度學(xué)習(xí)文本檢測(cè)器圖文本檢測(cè)全卷積網(wǎng)絡(luò)的結(jié)構(gòu)等人的圖。隨著和的發(fā)布,我們現(xiàn)在可以使用一種名為的基于深度學(xué)習(xí)的文本檢測(cè)器,它基于等人的年論文一種高效精確的場(chǎng)景文本檢測(cè)器。 by Adrian Rosebrock on August 20, 2018 in Deep Learning, Optical Character Recogn...

    VincentFF 評(píng)論0 收藏0
  • Android控件之TextView全解析

    摘要:設(shè)置控件中內(nèi)容的位置,如上表示居中。為文本指定輸入法,需要完全限定名完整的包名。在指定的情況下,設(shè)置重復(fù)滾動(dòng)的次數(shù),當(dāng)設(shè)置為時(shí)表示無限次。限制顯示的文本長(zhǎng)度,超出部分不顯示。 前言 大家好!在前幾篇文章里,我們?cè)敿?xì)介紹了Android中的常用布局,使大家對(duì)Android中的頁面布局有了一定認(rèn)識(shí),而對(duì)于布局中使用的一些UI控件如Button、TextView等,有的讀者可能還存在一些困惑...

    jsdt 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<