Lepe'nin cevabını birkaç şey dışında beğendim:
- Tarayıcı koklama, jQuery veya no en uygun değil
- KURU
- Nesnenin üstü createTextRange'ı desteklemiyorsa IE8'de çalışmaz
- Chrome'un setBaseAndExtent kullanma yeteneği gerekir (IMO)
- Birden fazla DOM öğesine yayılan metin seçilmez ("seçilen" öğedeki öğeler). Aradığınızda Başka bir deyişle selText birden yayılma unsurları içeren bir div, bir edecektir değil bu unsurların her birinin metni seçin. Bu benim için bir anlaşma kırıcıydı YMMV.
İşte benim ilham kaynağımın yanıtını bulmak için başını sallayan bir şey. Eminim bu belki biraz ağır (ve aslında moreso olabilir ama ben kazıyorum) gibi alay edilecektir. Ancak çalışır ve tarayıcı kokusunu önler ve mesele budur .
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;
}
Bu kadar. Gördüğünüz şeylerden bazıları okunabilirlik ve / veya rahatlık içindir. Mac, Opera, Safari, Chrome, Firefox ve IE'nin en son sürümlerinde test edilmiştir. Ayrıca IE8'de test edilmiştir. Ayrıca tipik olarak sadece kod blokları içinde / gerektiğinde değişkenleri bildiririm ama jslint bunların hepsi üst bildirildi önerdi. Tamam jslint.
Düzenle
Bu op koduna bağlamak için nasıl dahil unuttum:
function SelectText(element) {
$("#" + element).selectText();
}
Şerefe