2012-09-03 23 views
31

इसे डुप्लिकेट के रूप में फ़्लैग करने से पहले, मैं चाहता हूं कि आपको यह एहसास हो कि किसी ने वास्तव में इस विशिष्ट प्रश्न के लिए एक अच्छा उत्तर नहीं दिया है। select all text in contenteditable div when it focus/click में, स्वीकृत उत्तर और टिम डाउन का उत्तर दोनों सहायक नहीं हैं, क्योंकि वे केवल तभी काम करते हैं जब तत्व पहले ही केंद्रित हो। मेरे मामले में, मैं चाहता हूं कि सामग्री के सभी पाठ को बटन के क्लिक के बाद चुना जाए, भले ही div पहले से केंद्रित नहीं था।संतोषजनक div में सभी पाठ का चयन कैसे करें?

मैं यह कैसे कर सकता हूं?

उत्तर

46

मैं अपने जवाब के साथ आने के लिए this thread से कुछ कोड का इस्तेमाल किया। यह 100% jQuery है जैसा आपने पूछा था। आशा है कि आप इसे पसंद करेंगे :)

jQuery.fn.selectText = function(){ 
    var doc = document; 
    var element = this[0]; 
    console.log(this, element); 
    if (doc.body.createTextRange) { 
     var range = document.body.createTextRange(); 
     range.moveToElementText(element); 
     range.select(); 
    } else if (window.getSelection) { 
     var selection = window.getSelection();   
     var range = document.createRange(); 
     range.selectNodeContents(element); 
     selection.removeAllRanges(); 
     selection.addRange(range); 
    } 
}; 

$("button").click(function() { 
    $("#editable").selectText(); 
});​ 

jsfiddle लिंक।

+0

क्या है इस पर ब्राउज़र संगतता? – crush

+0

FF 28 में फ़िल्ड काम करता है, लेकिन ओएस थीम (सीएसएस 'उपस्थिति') के साथ' संतुष्ट 'इनपुट-तत्वों के लिए काम नहीं करता है। आप 'element.focus();' ' selectText() 'फ़ंक्शन, या यह उस क्षेत्र में कर्सर के बिना पाठ का चयन करेगा। – CoDEmanX

+0

बस एक सुझाव," console.log (यह, तत्व) "पंक्ति को हटाएं;", क्योंकि इसे काम करने की आवश्यकता नहीं है। –

2
<div id="test" style=" border:solid 1px #D31444" contenteditable="true" onclick="document.execCommand('selectAll',false,null)">12 some text...</div> 

लिंक में दिए गए इस उत्तर के आधार पर, आप अपने बटन के भीतर क्लिक करने के लिए कोड का उपयोग नहीं कर सकते हैं।

क्या im कहावत भी div में कहना है onfocus="document.execCommand('selectAll',false,null)"

फिर अगली परिदृश्य में उदाहरण के लिए ध्यान केंद्रित $('#test').focus();

9

को गति प्रदान करने jQuery का उपयोग करता है, तो संपादन योग्य div (माउस, कीबोर्ड के साथ में या एक क्लिक करके उपयोगकर्ता सेट फोकस बटन) तो संपादन योग्य div की सामग्री का चयन किया जाता है।

<div id="editable" style=" border:solid 1px #D31444" contenteditable="true" 
 
    onfocus="document.execCommand('selectAll', false, null);"> 
 
    12 some text... 
 
</div> 
 
    
 
<button onclick="document.getElementById('editable').focus();" >Click me</button>

JSFiddle पर: http://jsfiddle.net/QKUZz/

+0

jsfiddle लिंक कृपया – think123

+0

और नहीं है वहाँ एक 'execCommand' शामिल नहीं है? – think123

+0

@ think123, अद्यतन उत्तर में लिंक देखें। 'Document.execCommand' क्यों नहीं? एक और तरीका (मुझे लगता है) 'चयन' और' श्रेणी 'वस्तुओं का उपयोग करने की आवश्यकता है। –

3

ग्रेट फ़ंक्शन।

मैं एक वर्ग के माध्यम से संपादन योग्य divs के किसी भी संख्या में किसी टेक्स्ट से भरा चयन सक्षम करने के लिए यह अनुकूल नहीं बनाया है, चाहे जिसके पास, या करने के लिए टैब किए गए:

$.fn.selectText = function(){ 
    var doc = document; 
    var element = this[0]; 
    //console.log(this, element); 
    if (doc.body.createTextRange) { 
     var range = document.body.createTextRange(); 
     range.moveToElementText(element); 
     range.select(); 
    } else if (window.getSelection) { 
     var selection = window.getSelection();   
     var range = document.createRange(); 
     range.selectNodeContents(element); 
     selection.removeAllRanges(); 
     selection.addRange(range); 
    } 
}; 

$(".editable").on("focus", function() { 
    $(this).selectText(); 
}); 
$(".editable").on("click", function() { 
    $(this).selectText(); 
}); 
$('.editable').mouseup(function(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    // maximize browser compatability 
    e.returnValue = false; 
    e.cancelBubble = true; 
    return false; 
}); 

HTML:

<div class="editable" style="border:dotted 1px #ccc;" contenteditable="true">01 text...</div> 
<div class="editable" style="border:dotted 1px #ccc;" contenteditable="true">02 text...</div> 
<div class="editable" style="border:dotted 1px #ccc;" contenteditable="true">03 text...</div> 

बेला :

http://jsfiddle.net/tw9jwjbv/

+0

ग्रेट फ़ंक्शन , मेरे जीवन को बचाया। मैंने '$ (" # mybutton ") जोड़ा। क्लिक करें (फ़ंक्शन() { $ (" # mydiv ")।पाठ चुनें(); document.execCommand ("प्रतिलिपि"); 'क्लिपबोर्ड पर DIV की सामग्री की प्रतिलिपि बनाएँ। – Matt