在JavaScript中,有一个方法window.getSelection()
,可以让我获取用户所做的当前选择。
是否有相应的功能,例如window.setSelection()
,可让我设置或清除当前选择?
答案 0 :(得分:16)
清除所有主流浏览器中的选择:
function clearSelection() {
if (window.getSelection) {
window.getSelection().removeAllRanges();
} else if (document.selection) {
document.selection.empty();
}
}
选择内容需要在大多数浏览器中使用DOM Range
和Selection
个对象,并在IE中使用TextRange
个对象。 9.这是一个简单的跨浏览器示例,用于选择特定元素的内容:
function selectElement(element) {
if (window.getSelection) {
var sel = window.getSelection();
sel.removeAllRanges();
var range = document.createRange();
range.selectNodeContents(element);
sel.addRange(range);
} else if (document.selection) {
var textRange = document.body.createTextRange();
textRange.moveToElementText(element);
textRange.select();
}
}
答案 1 :(得分:7)
也许会这样做:
window.selection.clear();
Crossbrowser版本:
if (window.getSelection) {
if (window.getSelection().empty) { // Chrome
window.getSelection().empty();
} else if (window.getSelection().removeAllRanges) { // Firefox
window.getSelection().removeAllRanges();
}
} else if (document.selection) { // IE?
document.selection.empty();
}
答案 2 :(得分:0)
在支持“选择”和“范围”内容的浏览器中,您需要创建一个范围对象,然后设置其开始/结束。 “范围”对象的Mozilla documentation有很多信息。
Chrome不支持此功能,至少不支持该API,我敢打赌Safari也不支持。
编辑 - 感谢@Tim Down注意到WebKit(Chrome& Safari)确实支持这一点,这意味着我的jsfiddle有一个错字或其他东西!
答案 3 :(得分:0)
注意:这是一项实验性技术 在生产中使用它之前,请仔细检查 Browser compatibility 表。
清除选择:
// get a Selection object representing the range of text selected by the user or the current position of the caret.
var selection = window.getSelection();
selection.removeAllRanges();
按节点设置选择:
var selection = window.getSelection();
var range = document.createRange();
range.selectNode(nodeToSelect);
selection.addRange(range);
按索引设置选择:
var selection = window.getSelection();
var range = document.createRange();
range.setStart(nodeToSelect, this.startIndex);
range.setEnd(nodeToSelect, this.endIndex);
selection.addRange(range);
获取当前选择
var range = window.getSelection().getRangeAt(0);