2010-10-19 15 views
12

में चयनित टेक्स्ट को प्रतिस्थापित करना jQuery में ऐसा करने का सबसे अच्छा तरीका क्या है? यह एक काफी आम उपयोग मामले होना चाहिए।टेक्स्टरेरा

  1. उपयोगकर्ता एक पाठ क्षेत्र में पाठ का चयन करता है
  2. वह एक लिंक
  3. कड़ी में पाठ पाठ क्षेत्र में चयनित पाठ की जगह पर क्लिक करता है

किसी भी कोड की बहुत सराहना की जाएगी - मैं कर रहा हूँ भाग 3 के साथ कुछ समस्याएं हैं।

+0

गुण 'selectionStart' और' 'अपने textarea' की selectionEnd' या' input' सभी की जरूरत है आजकल। इनपुट तत्व के मूल्य पर 'स्लाइस' विधि के साथ संयोजन करें। – caw

उत्तर

16

यहां सभी प्रमुख ब्राउज़रों में आप इसे कैसे कर सकते हैं। मुझे jQuery plug-in भी मिला है जिसमें यह कार्यक्षमता शामिल है। इसी के साथ, कोड होगा

$("your_textarea_id").replaceSelectedText("NEW TEXT"); 

यहाँ एक पूर्ण स्टैंड-अलोन समाधान है:

function getInputSelection(el) { 
    var start = 0, end = 0, normalizedValue, range, 
     textInputRange, len, endRange; 

    if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") { 
     start = el.selectionStart; 
     end = el.selectionEnd; 
    } else { 
     range = document.selection.createRange(); 

     if (range && range.parentElement() == el) { 
      len = el.value.length; 
      normalizedValue = el.value.replace(/\r\n/g, "\n"); 

      // Create a working TextRange that lives only in the input 
      textInputRange = el.createTextRange(); 
      textInputRange.moveToBookmark(range.getBookmark()); 

      // Check if the start and end of the selection are at the very end 
      // of the input, since moveStart/moveEnd doesn't return what we want 
      // in those cases 
      endRange = el.createTextRange(); 
      endRange.collapse(false); 

      if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { 
       start = end = len; 
      } else { 
       start = -textInputRange.moveStart("character", -len); 
       start += normalizedValue.slice(0, start).split("\n").length - 1; 

       if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) { 
        end = len; 
       } else { 
        end = -textInputRange.moveEnd("character", -len); 
        end += normalizedValue.slice(0, end).split("\n").length - 1; 
       } 
      } 
     } 
    } 

    return { 
     start: start, 
     end: end 
    }; 
} 

function replaceSelectedText(el, text) { 
    var sel = getInputSelection(el), val = el.value; 
    el.value = val.slice(0, sel.start) + text + val.slice(sel.end); 
} 

var el = document.getElementById("your_textarea"); 
replaceSelectedText(el, "[NEW TEXT]"); 
+0

यह एक अद्भुत उपयोगी प्लगइन होगा। आपको बहुत - बहुत धन्यवाद! यह थोडा अजीब है कि इस उपयोग के मामले को अभी तक कैसे कवर नहीं किया गया है। मैंने अपना खुद का लिखने की कोशिश की, लेकिन इतने सारे ब्राउज़र क्विर्क पर मारा। ;) –

+0

प्रतिस्थापित करें चयनित चयन - एकमात्र मुद्दा जो मैं देखता हूं वह यह है कि आईई में, जब कुछ भी नहीं चुना जाता है, तो अंत के विपरीत कर्सर सामने जाता है। वैसे भी तय किया जा सकता है? –

+0

यहां पोस्ट किए गए कोड या jQuery प्लगइन में? यहां कोड संक्षिप्तता के लिए बाद में चयन को दोबारा बदलने का कोई प्रयास नहीं करता है। JQuery प्लगइन उस से निपटना चाहिए। –

संबंधित मुद्दे