Saya menyukai jawaban lepe kecuali untuk beberapa hal:
- Peramban peramban, jQuery atau tidak, tidak optimal
- KERING
- Tidak berfungsi di IE8 jika orang tua obj tidak mendukung createTextRange
- Kemampuan Chrome untuk menggunakan setBaseAndExtent harus ditingkatkan (IMO)
- Tidak akan memilih rentang teks di beberapa elemen DOM (elemen dalam elemen "terpilih"). Dengan kata lain jika Anda memanggil selText pada div yang berisi beberapa elemen span, itu tidak akan memilih teks dari masing-masing elemen tersebut. Bagi saya, itu adalah pemecah kesepakatan, YMMV.
Inilah yang saya pikirkan, dengan anggukan ke jawaban lepe untuk inspirasi. Saya yakin saya akan diejek karena ini mungkin agak berat (dan sebenarnya bisa jadi lebih tapi saya ngelantur). Tapi itu berfungsi dan menghindari peramban browser dan itu intinya .
selectText:function(){
var range,
selection,
obj = this[0],
type = {
func:'function',
obj:'object'
},
// Convenience
is = function(type, o){
return typeof o === type;
};
if(is(type.obj, obj.ownerDocument)
&& is(type.obj, obj.ownerDocument.defaultView)
&& is(type.func, obj.ownerDocument.defaultView.getSelection)){
selection = obj.ownerDocument.defaultView.getSelection();
if(is(type.func, selection.setBaseAndExtent)){
// Chrome, Safari - nice and easy
selection.setBaseAndExtent(obj, 0, obj, $(obj).contents().size());
}
else if(is(type.func, obj.ownerDocument.createRange)){
range = obj.ownerDocument.createRange();
if(is(type.func, range.selectNodeContents)
&& is(type.func, selection.removeAllRanges)
&& is(type.func, selection.addRange)){
// Mozilla
range.selectNodeContents(obj);
selection.removeAllRanges();
selection.addRange(range);
}
}
}
else if(is(type.obj, document.body) && is(type.obj, document.body.createTextRange)) {
range = document.body.createTextRange();
if(is(type.obj, range.moveToElementText) && is(type.obj, range.select)){
// IE most likely
range.moveToElementText(obj);
range.select();
}
}
// Chainable
return this;
}
Itu dia. Beberapa yang Anda lihat adalah untuk keterbacaan dan / atau kenyamanan. Diuji pada Mac dalam versi terbaru Opera, Safari, Chrome, Firefox dan IE. Juga diuji di IE8. Juga saya biasanya hanya mendeklarasikan variabel jika / ketika diperlukan di dalam blok kode tetapi jslint menyarankan mereka semua dinyatakan di bagian atas. Ok jslint.
Sunting
Saya lupa menyertakan cara mengikat ini ke kode op:
function SelectText(element) {
$("#" + element).selectText();
}
Bersulang