State of De-selection Affairs 2014
Tôi đã thực hiện một số nghiên cứu của riêng tôi. Đây là hàm tôi đã viết và đang sử dụng những ngày này:
(function deselect(){
var selection = ('getSelection' in window)
? window.getSelection()
: ('selection' in document)
? document.selection
: null;
if ('removeAllRanges' in selection) selection.removeAllRanges();
else if ('empty' in selection) selection.empty();
})();
Về cơ bản, getSelection().removeAllRanges()
hiện được hỗ trợ bởi tất cả các trình duyệt hiện đại (bao gồm cả IE9 +). Đây rõ ràng là phương pháp chính xác để tiến tới.
Các vấn đề về khả năng tương thích bao gồm:
- Phiên bản cũ của Chrome và Safari được sử dụng
getSelection().empty()
- IE8 trở xuống được sử dụng
document.selection.empty()
Cập nhật
Có lẽ bạn nên kết thúc chức năng lựa chọn này để sử dụng lại.
function ScSelection(){
var sel=this;
var selection = sel.selection =
'getSelection' in window
? window.getSelection()
: 'selection' in document
? document.selection
: null;
sel.deselect = function(){
if ('removeAllRanges' in selection) selection.removeAllRanges();
else if ('empty' in selection) selection.empty();
return sel; // chainable :)
};
sel.getParentElement = function(){
if ('anchorNode' in selection) return selection.anchorNode.parentElement;
else return selection.createRange().parentElement();
};
}
// use it
var sel = new ScSelection;
var $parentSection = $(sel.getParentElement()).closest('section');
sel.deselect();
Tôi đã làm cho trang này trở thành wiki cộng đồng để mọi người của bạn có thể thêm chức năng cho cái này hoặc cập nhật mọi thứ khi các tiêu chuẩn phát triển.
document.selection
nó bao hàm sự tồn tại của mộtempty()
phương thức của nó. Bạn đã thử nghiệm phương pháp trong mọi trường hợp khác, vì vậy bạn cũng có thể thử nghiệmempty
trong trường hợp cuối cùng.