मुझे कुछ चीजों को छोड़कर लेप का जवाब पसंद आया:
- ब्राउज़र-सूँघना, jQuery या नहीं इष्टतम नहीं है
- सूखी
- IE8 में काम नहीं करता है अगर obj के माता पिता createTextRange का समर्थन नहीं करता है
- Chrome का सेटबेस उपयोग करने की क्षमता का लाभ जाना चाहिए (IMO)
- कई DOM तत्वों ("चयनित" तत्व के भीतर तत्व) में फैले पाठ का चयन नहीं करेंगे। दूसरे शब्दों में, यदि आप कई स्पेल तत्वों वाले div पर selText कहते हैं, तो यह उन तत्वों में से प्रत्येक के पाठ का चयन नहीं करेगा । यह मेरे लिए, 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;
}
बस। जो कुछ आप देखते हैं वह पठनीयता और / या सुविधा के लिए है। ओपेरा, सफारी, क्रोम, फ़ायरफ़ॉक्स और IE के नवीनतम संस्करणों में मैक पर परीक्षण किया गया। IE8 में भी परीक्षण किया गया। इसके अलावा, मैं आमतौर पर कोड ब्लॉक के अंदर जरूरत पड़ने पर केवल चर घोषित करता हूं, लेकिन jslint ने सुझाव दिया कि वे सभी को शीर्ष घोषित किया जाएगा। ठीक है jslint
संपादित करें
मैं इसे op के कोड में कैसे शामिल करना भूल गया:
function SelectText(element) {
$("#" + element).selectText();
}
चियर्स