摘要:先普及一些關(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)于文本選擇范圍的基礎(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è)字之間嗎...
摘要:納入深度學(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 ...
摘要:的文本檢測(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...
摘要:設(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等,有的讀者可能還存在一些困惑...
閱讀 3816·2021-11-18 13:19
閱讀 1169·2021-10-11 10:58
閱讀 3278·2019-08-29 16:39
閱讀 3130·2019-08-26 12:08
閱讀 2026·2019-08-26 11:33
閱讀 2453·2019-08-23 18:30
閱讀 1298·2019-08-23 18:21
閱讀 2515·2019-08-23 18:18