Очистить выбор в Firefox - PullRequest
       46

Очистить выбор в Firefox

16 голосов
/ 31 мая 2011

У меня есть эта функция

function smth() {
var container = null;
var newContainer = null;
if (window.getSelection) {  // all browsers, except IE before version 9
    alert("first if");
    var selectionRange = window.getSelection();
    if (selectionRange.rangeCount > 0) {
        var range = selectionRange.getRangeAt(0);
        container = range.commonAncestorContainer;
        newContainer = container;
    }
}
else {
    if (document.selection) {   // Internet Explorer
        alert("second if");
        var textRange = document.selection.createRange();
        container = textRange.parentElement();
    }
}

if (newContainer) {
    return newContainer.nodeName;
}
else {
    alert("Container object for the selection is not available!");
}
}     

Теперь, после того как я сделаю то, что мне нужно сделать с выбором, мне нужно очистить его. Я попробовал несколько вещей, ничего не получалось, есть идеи?

document.selection.clear ()    

это не сработало.

Ответы [ 3 ]

61 голосов
/ 31 мая 2011

Для проблемного браузера:

document.selection.empty()

Для других браузеров:

window.getSelection().removeAllRanges()

См. http://help.dottoro.com/ljigixkc.php

0 голосов
/ 23 марта 2017

Используйте tinymce.activeEditor.selection.collapse(), если это не работает, тогда используйте const range = tinymce.activeEditor.dom.createRng(); tinymce.activeEditor.selection.setRng(range)

0 голосов
/ 29 февраля 2016

Примечание: в случае, если вы выбираете текст элемента input или textarea, ваш код будет иметь более широкую поддержку браузера, если вы будете использовать стандартный метод выбора элемента HTML для ввода или textarea.

Если html input или textarea элемент был выбран с помощью встроенного метода select, то использование методов, предложенных выше, не работает на моем firefox 44.0.2.То, что сработало для этого, и я предполагаю, работает на ВСЕХ БРАУЗЕРОВ, выполняет следующий код, который создает новый элемент и выбирает его.Новый элемент не может быть с display:none или visibility:hidden, потому что тогда он не выбран в моем Firebox, поэтому хитрость заключается в том, чтобы сделать его невидимым, принудительно установив для всех атрибутов размера значение 0\none.

var tempElement = document.createElement("input");
tempElement.style.cssText = "width:0!important;padding:0!important;border:0!important;margin:0!important;outline:none!important;boxShadow:none!important;";
document.body.appendChild(tempElement);
tempElement.select();
/* Use removeChild instead of remove because remove is less supported */
document.body.removeChild(tempElement);
...