第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

獲取范圍的開始和結(jié)束偏移量相對(duì)于其父容器的值

獲取范圍的開始和結(jié)束偏移量相對(duì)于其父容器的值

ibeautiful 2019-07-02 09:52:26
獲取范圍的開始和結(jié)束偏移量相對(duì)于其父容器的值假設(shè)我有這個(gè)HTML元素:<div id="parent">  Hello everyone! <a>This is my home page</a>  <p>Bye!</p></div>用戶用鼠標(biāo)選擇“家”。我想知道有多少個(gè)字符#parent他的選擇開始(從結(jié)尾有多少個(gè)字符)#parent他的選擇結(jié)束)。即使他選擇了一個(gè)HTML標(biāo)記,這也是可行的。(我需要它在所有瀏覽器中工作)range.startOffset看起來很有希望,但它是一個(gè)相對(duì)于范圍的直接容器的偏移量,并且只有當(dāng)容器是文本節(jié)點(diǎn)時(shí)才是字符偏移。
查看完整描述

3 回答

?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊

我知道這已經(jīng)有一年的歷史了,但這篇文章是很多關(guān)于找到卡雷特職位的問題的最佳搜索結(jié)果,我覺得這很有用。

在內(nèi)容可編輯div中將元素從一個(gè)位置拖放到另一個(gè)位置后,我試圖使用Tim上面的優(yōu)秀腳本找到新的光標(biāo)位置。它在FF和IE中運(yùn)行良好,但在Chrome中,拖動(dòng)操作突出顯示了拖動(dòng)開始和結(jié)束之間的所有內(nèi)容,從而導(dǎo)致返回caretOffset太大或太小(按選定區(qū)域的長(zhǎng)度)。

我在第一個(gè)if語(yǔ)句中添加了幾行代碼,以檢查是否選擇了文本并相應(yīng)地調(diào)整結(jié)果。新的聲明如下。請(qǐng)?jiān)徫以谶@里添加這個(gè)信息是不合適的,因?yàn)檫@不是OP想要做的事情,但是正如我所說的,幾個(gè)關(guān)于卡雷特職位信息的搜索讓我找到了這篇文章,所以它(希望)有可能幫助到其他人。

Tim的第一個(gè)if語(yǔ)句,增加了行(*):

if (typeof window.getSelection != "undefined") {
  var range = window.getSelection().getRangeAt(0);
  var selected = range.toString().length; // *
  var preCaretRange = range.cloneRange();
  preCaretRange.selectNodeContents(element);
  preCaretRange.setEnd(range.endContainer, range.endOffset);

  if(selected){ // *
    caretOffset = preCaretRange.toString().length - selected; // *
  } else { // *
    caretOffset = preCaretRange.toString().length; 
  } // *}


查看完整回答
反對(duì) 回復(fù) 2019-07-02
?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

經(jīng)過幾天的實(shí)驗(yàn),我發(fā)現(xiàn)了一種看起來很有前途的方法。因?yàn)?/trans>selectNodeContents()不處理<br>標(biāo)記正確,我編寫了一個(gè)自定義算法來確定每個(gè)標(biāo)記的文本長(zhǎng)度。node在一個(gè)contenteditable..為了計(jì)算例如選擇開始,我總結(jié)了前面所有節(jié)點(diǎn)的文本長(zhǎng)度。那樣的話,我可以句柄(多)換行:

var editor = null;var output = null;const getTextSelection = function (editor) {
    const selection = window.getSelection();

    if (selection != null && selection.rangeCount > 0) {
        const range = selection.getRangeAt(0);

        return {
            start: getTextLength(editor, range.startContainer, range.startOffset),
            end: getTextLength(editor, range.endContainer, range.endOffset)
        };
    } else
        return null;}const getTextLength = function (parent, node, offset) {
    var textLength = 0;

    if (node.nodeName == '#text')
        textLength += offset;
    else for (var i = 0; i < offset; i++)
        textLength += getNodeTextLength(node.childNodes[i]);

    if (node != parent)
        textLength += getTextLength(parent, node.parentNode, getNodeOffset(node));

    return textLength;}const getNodeTextLength = function (node) {
    var textLength = 0;

    if (node.nodeName == 'BR')
        textLength = 1;
    else if (node.nodeName == '#text')
        textLength = node.nodeValue.length;
    else if (node.childNodes != null)
        for (var i = 0; i < node.childNodes.length; i++)
            textLength += getNodeTextLength(node.childNodes[i]);

    return textLength;}const getNodeOffset = function (node) {
    return node == null ? -1 : 1 + getNodeOffset(node.previousSibling);}window.onload = function () {
    editor = document.querySelector('.editor');
    output = document.querySelector('#output');

    document.addEventListener('selectionchange', handleSelectionChange);}const handleSelectionChange = function () {
    if (isEditor(document.activeElement)) {
        const textSelection = getTextSelection(document.activeElement);

        if (textSelection != null) {
            const text = document.activeElement.innerText;
            const selection = text.slice(textSelection.start, textSelection.end);
            print(`Selection: [${selection}] (Start: ${textSelection.start}, End: ${textSelection.end})`);
        } else
            print('Selection is null!');
    } else
        print('Select some text above');}const isEditor = function (element) {
    return element != null && element.classList.contains('editor');}const print = function (message) {
    if (output != null)
        output.innerText = message;
    else
        console.log('output is null!');}
* {
    font-family: 'Georgia', sans-serif;
    padding: 0;
    margin: 0;}body {
    margin: 16px;}.p {
    font-size: 16px;
    line-height: 24px;
    padding: 0 2px;}.editor {
    border: 1px solid #0000001e;
    border-radius: 2px;
    white-space: pre-wrap;}#output {
    margin-top: 16px;}
<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="./script.js" async></script>
    <link href="./stylesheet.css" rel="stylesheet">
    <title>Caret Position</title></head><body>
    <p class="editor" contenteditable="true"><em>Write<br></em><br>some <br>awesome <b><em>text </em></b>here...</p>
    <p id="output">Select some text above</p></body></html>


查看完整回答
反對(duì) 回復(fù) 2019-07-02
  • 3 回答
  • 0 關(guān)注
  • 557 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)