在Firefox中清除选择

时间:2011-05-31 11:24:59

标签: javascript selection range clear

我有这个功能

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 个答案:

答案 0 :(得分:61)

对于有问题的浏览器:

document.selection.empty()

对于其他浏览器:

window.getSelection().removeAllRanges()

请参阅http://help.dottoro.com/ljigixkc.php

答案 1 :(得分:0)

注意:如果您选择输入或textarea元素的文本,那么如果您使用输入或textarea的标准本机html元素select方法,您的代码将具有更多的跨浏览器支持。

如果使用本机select方法选择了html输入或textarea元素,那么使用上面建议的方法在我的firefox 44.0.2上不起作用。什么有用,我想在所有浏览器上工作,正在运行以下代码,它创建一个新元素并选择它。新元素不能与display:nonevisibility: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);

答案 2 :(得分:0)

使用     (1,7491,1025)  如果这不起作用,那么使用     tinymce.activeEditor.selection.collapse()