【问题标题】:How to select a word on double click using the Range-Interface?如何使用范围接口在双击时选择一个单词?
【发布时间】:2019-05-27 22:45:21
【问题描述】:

例如:

<span>"This is s"<span style="color:1abc9c">ent</span>"e<strong>nc</strong>"e to be select"</span>

句子是这样的:“这是要选择的句子”。现在,当我双击单词 sentence 内的任意位置时,它应该选择该单词。这个词怎么选?

【问题讨论】:

    标签: javascript range selection


    【解决方案1】:

    如果您想双击句子中的任何单词来选择单词“sentence” 但不能选择整个句子

    let sentence = document.getElementsByClassName('sentence');
    let word = document.getElementById('word');
    
    Array.from(sentence).forEach(sentence =>
      sentence.addEventListener('dblclick', (e) => {
        e.preventDefault();
        let sel = window.getSelection();
        sel.removeAllRanges();
        let range = document.createRange();
        range.selectNode(word);
        sel.addRange(range);
      })
    );
    .sentence {
      user-select: none;
      cursor: text;
    }
    <span class="sentence">This is the </span><span id="word">sentence</span><span class="sentence"> to be selected.</span>

    或者如果你想双击句子中的任何单词来选择单词“sentence”

    let sentence = document.getElementById('sentence');
    let word = document.getElementById('word');
    
    sentence.addEventListener('dblclick', (e) => {
      e.preventDefault();
      let sel = window.getSelection();
      sel.removeAllRanges();
      let range = document.createRange();
      range.selectNode(word);
      sel.addRange(range);
    });
    <span id="sentence">This is the <span id="word">sentence</span> to be selected.</span>

    或者如果您想单击句子中的任何单词来选择单词“sentence”

    let sentence = document.getElementById('sentence');
    let word = document.getElementById('word');
    
    sentence.addEventListener('dblclick', () => {
      let sel = window.getSelection();
      sel.removeAllRanges();
      let range = document.createRange();
      range.selectNode(word);
      sel.addRange(range);
    });
    <span id="sentence">This is the <span id="word">sentence</span> to be selected.</span>

    或者,如果您想在“句子”单击来选择它:

    let word = document.getElementById('word');
    
    word.addEventListener('click', () => {
      let sel = window.getSelection();
      sel.removeAllRanges();
      let range = document.createRange();
      range.selectNode(word);
      sel.addRange(range);
    });
    This is the <span id="word">sentence</span> to be selected.

    或者,如果您想在 “句子”单击以使用带有 user-selectCSS 选择它:

    span {
      user-select: all;
    }
    This is the <span>sentence</span> to be selected.

    【讨论】:

    • @AvinashJadhav 我的回答是否符合您的需求,还是应该详细说明?如果有,请考虑接受。如果没有,请告诉我。
    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多