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を