Мені сподобалась відповідь лепе, за винятком кількох речей:
- Нюхає браузер, jQuery чи ні, це не оптимально
- СУХИЙ
- Не працює в IE8, якщо батько obj не підтримує createTextRange
- Спроможність Chrome використовувати setBaseAndExtent має бути використана (IMO)
- Не буде обрано текст, що охоплює декілька елементів DOM (елементи в межах "вибраного" елемента). Іншими словами, якщо ви зателефонуєте на selText на div, що містить кілька прольотних елементів, він не вибере текст кожного з цих елементів. Це було для мене зломником, YMMV.
Ось що я придумав, киваючи на відповідь лепе на відповідь. Я впевнений, що мене будуть висміювати, оскільки це, можливо, трохи важко, (і насправді це може бути більше, але я відступаю). Але це працює і уникає нюху браузера, і в цьому справа .
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;
}
Це воно. Дещо з того, що ви бачите, - це для читабельності та / або зручності. Тестовано на Mac в останніх версіях Opera, Safari, Chrome, Firefox та IE. Тестується також в IE8. Також я зазвичай декларую змінні лише в разі необхідності в блоках коду, але jslint запропонував їх оголосити вгорі. Добре jslint.
Редагувати
Я забув включити, як пов'язати це з кодом операційної системи:
function SelectText(element) {
$("#" + element).selectText();
}
Ура