Javascript - запретить выделение всего текста тройным щелчком и выделить только одно слово

Когда мы дважды щелкаем по одному слову, браузер выбирает это слово, когда мы трижды щелкаем по одному слову, браузер выбирает целую строку или весь абзац.

Здесь я хочу предотвратить выбор всех слов при тройном щелчке и изменить, чтобы выбрать только одно слово

Я пробовал с этим кодом

function clearSelection() {
    if(document.selection && document.selection.empty) {
        document.selection.empty();
    } else if(window.getSelection) {
        var sel = window.getSelection();
        sel.removeAllRanges();
    }
}

person Hunter    schedule 07.02.2017    source источник
comment
Когда звонят clearSelection()?   -  person uncoder    schedule 07.02.2017
comment
если там какой-либо выделенный текст, он очистит @uncoder   -  person Hunter    schedule 07.02.2017
comment
Я не уверен, что понимаю. Можете ли вы опубликовать свой полный код JavaScript или создать для него страницу JSFiddle?   -  person uncoder    schedule 07.02.2017
comment
jsfiddle.net/L6d0p4jo/159 @uncoder   -  person Hunter    schedule 07.02.2017
comment
Я не мог заставить evt.detail получить значение 3. Независимо от того, как я щелкаю, он всегда срабатывает со значением 0, возможно, потому что вы подписываетесь только на событие 'click'. Лучше всего было бы изучить событие jQuery.dblclick() или, в качестве альтернативы, вместо этого запретить выделение текста в целом с помощью CSS: stackoverflow.com/questions/826782/   -  person uncoder    schedule 07.02.2017


Ответы (2)


Это работает для вас? jsfiddle

Редактирую твою скрипку.

document.querySelector('div').addEventListener('click', function (evt) {
    var o = this,
        ot = this.textContent;
    if (evt.detail >= 3) {
        clearSelection();
    }
});

function clearSelection() {
    if(document.selection && document.selection.empty) {
        document.selection.empty();
    } else if(window.getSelection) {
        var sel = window.getSelection();
        sel.removeAllRanges();
    }
}
person Julian    schedule 07.02.2017

Вот моя вилка: http://jsfiddle.net/kr2t0bpw/1/

Он захватывает выбранное слово при втором щелчке и сохраняет смещения. При третьем щелчке он очищает выбор и создает новый с предыдущим сохраненным смещением.

var throttle = false;
var sel = window.getSelection();
var selStart = 0;
var selEnd = 0;

document.querySelector('div').addEventListener('click', function (evt) {    
    if (!throttle && evt.detail === 2) {
      selStart = sel.anchorOffset;
      selEnd = sel.focusOffset;
    }

    if (!throttle && evt.detail === 3) {
    var node = this.firstChild;
    sel.removeAllRanges();
    throttle = true;

    var range = document.createRange();
    range.setStart(node, selStart);
    range.setEnd(node, selEnd)

    sel.removeAllRanges();
    sel.addRange(range);
  }
});
person kbariotis    schedule 07.02.2017