ฉันชอบคำตอบของ lepe ยกเว้นบางสิ่ง:
- เบราว์เซอร์ดมกลิ่น jQuery หรือไม่ไม่ดีที่สุด
- แห้ง
- ไม่ทำงานใน IE8 ถ้าผู้ปกครองของ obj ไม่รองรับcreateTextRange
- ความสามารถของ Chrome ในการใช้setBaseAndExtentควรได้รับการยกระดับ (IMO)
- จะไม่เลือกข้อความที่ขยายไปทั่วองค์ประกอบ DOM หลายองค์ประกอบ (องค์ประกอบภายในองค์ประกอบ "เลือก") กล่าวอีกนัยหนึ่งถ้าคุณเรียกselTextบน div ที่มีองค์ประกอบ span หลายองค์ประกอบมันจะไม่เลือกข้อความของแต่ละองค์ประกอบเหล่านั้น นั่นคือดีลเลอร์สำหรับฉัน 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
แก้ไข
ฉันลืมที่จะรวมวิธีการผูกเข้ากับรหัสของ op:
function SelectText(element) {
$("#" + element).selectText();
}
ไชโย