สถานะของการยกเลิกการคัดเลือก 2557
ฉันได้ค้นคว้าด้วยตัวเอง นี่คือฟังก์ชั่นที่ฉันเขียนและใช้งานอยู่ทุกวันนี้:
(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();
})();
โดยทั่วไปแล้วgetSelection().removeAllRanges()
เบราว์เซอร์สมัยใหม่ทั้งหมดได้รับการสนับสนุน (รวมถึง IE9 +) นี่เป็นวิธีการที่ถูกต้องในการก้าวไปข้างหน้า
ปัญหาความเข้ากันได้คิดเป็น:
- ใช้ Chrome และ Safari เวอร์ชันเก่า
getSelection().empty()
- ใช้ IE8 และต่ำกว่า
document.selection.empty()
ปรับปรุง
อาจเป็นความคิดที่ดีที่จะสรุปฟังก์ชันการเลือกนี้เพื่อนำกลับมาใช้ใหม่
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();
ฉันได้ทำให้เป็นวิกิชุมชนเพื่อให้คุณสามารถเพิ่มฟังก์ชันการทำงานนี้หรืออัปเดตสิ่งต่างๆได้เมื่อมาตรฐานพัฒนาขึ้น
document.selection
ส่อถึงการดำรงอยู่ของempty()
วิธีการของมัน คุณได้ทดสอบวิธีนี้แล้วในทุกกรณีดังนั้นคุณอาจทดสอบempty
ในกรณีสุดท้ายด้วยเช่นกัน