นอกจากคำตอบของ Tim Downsแล้วฉันยังสร้างวิธีแก้ปัญหาที่ใช้งานได้แม้ใน oldIE:
var selectText = function() {
var range, selection;
if (document.body.createTextRange) {
range = document.body.createTextRange();
range.moveToElementText(this);
range.select();
} else if (window.getSelection) {
selection = window.getSelection();
range = document.createRange();
range.selectNodeContents(this);
selection.removeAllRanges();
selection.addRange(range);
}
};
document.getElementById('foo').ondblclick = selectText;
ผ่านการทดสอบใน IE 8+, Firefox 3+, Opera 9+ และ Chrome 2+ แม้ว่าฉันจะตั้งค่าเป็นปลั๊กอิน jQuery:
jQuery.fn.selectText = function() {
var range, selection;
return this.each(function() {
if (document.body.createTextRange) {
range = document.body.createTextRange();
range.moveToElementText(this);
range.select();
} else if (window.getSelection) {
selection = window.getSelection();
range = document.createRange();
range.selectNodeContents(this);
selection.removeAllRanges();
selection.addRange(range);
}
});
};
$('#foo').on('dblclick', function() {
$(this).selectText();
});
... และใครเป็นจำนวนเต็มในนี่ก็เหมือนกันสำหรับคนที่ชอบดื่มกาแฟทั้งหมด:
jQuery.fn.selectText = ->
@each ->
if document.body.createTextRange
range = document.body.createTextRange()
range.moveToElementText @
range.select()
else if window.getSelection
selection = window.getSelection()
range = document.createRange()
range.selectNodeContents @
selection.removeAllRanges()
selection.addRange range
return
ปรับปรุง:
หากคุณต้องการเลือกทั้งหน้าหรือเนื้อหาของภูมิภาคที่แก้ไขได้ (ถูกตั้งค่าสถานะด้วยcontentEditable
) คุณสามารถทำได้ง่ายขึ้นมากโดยเปลี่ยนไปdesignMode
ใช้และใช้document.execCommand
:
มีจุดเริ่มต้นที่ดีที่ MDNและเอกสารประกอบเล็กน้อย
var selectText = function () {
document.execCommand('selectAll', false, null);
};
(ทำงานได้ดีใน IE6 +, Opera 9+, Firefoy 3+, Chrome 2+) http://caniuse.com/#search=execCommand
selectElementContents()
เข้าsetTimeout()
หรือrequestAnimationFrame()
ถ้าเรียกจากonfocus
ไฟล์. ดูjsfiddle.net/rudiedirkx/MgASG/1/show