Ngoài câu trả lời của Tim Downs , tôi đã thực hiện một giải pháp hoạt động ngay cả trong 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;
Đã thử nghiệm trên IE 8+, Firefox 3+, Opera 9+ và Chrome 2+. Ngay cả khi tôi đã thiết lập nó thành một plugin 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();
});
... và ai là người đã được thiết lập, đây là điều tương tự cho tất cả những người nghiện cà phê:
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
Cập nhật:
Nếu bạn muốn chọn toàn bộ trang hoặc nội dung của vùng có thể chỉnh sửa (được gắn cờ contentEditable
), bạn có thể làm điều đó đơn giản hơn nhiều bằng cách chuyển sang designMode
và sử dụng document.execCommand
:
Có một điểm khởi đầu tốt ở MDN và một tài liệu nhỏ .
var selectText = function () {
document.execCommand('selectAll', false, null);
};
(hoạt động tốt trong IE6 +, Opera 9+, Firefoy 3+, Chrome 2+) http://caniuse.com/#search=execCommand
selectElementContents()
bằng mộtsetTimeout()
hoặcrequestAnimationFrame()
nếu được gọi từ mộtonfocus
. Xem jsfiddle.net/rudiedirkx/MgASG/1/show