जावास्क्रिप्ट में textarea से चयनित पाठ की स्थिति कैसे प्राप्त करें?


20

मैं जावास्क्रिप्ट का उपयोग करके चयनित पाठ स्थिति प्राप्त करना चाहता हूं। उदाहरण के लिए,
मेरे पास एक साधारण पाठ है।

#input-text {
  resize: none;
  width: 50%;
  height: 50px;
  margin: 1rem auto;
}
<textarea id="input-text">I am a student and I want to become a good person</textarea>

मेरे पाठ में, मेरे पास कुछ पाठ हैं जैसे:

"I am a student and I want to become a good person"

इस स्ट्रिंग से, यदि मैं टेक्स्टारिया से "एक अच्छा व्यक्ति" बन जाता हूं, तो मैं
जावास्क्रिप्ट में चयनित पाठ / स्ट्रिंग स्थिति कैसे प्राप्त कर सकता हूं?


यहाँ चयनित स्ट्रिंग वर्ण 29 से शुरू होता है और 49 में समाप्त होता है। इसलिए आरंभ स्थिति 29 है और अंतिम स्थिति 49 है


1
स्थिति से आपका मतलब है कि स्ट्रिंग में "बन" के चरित्र "बी" का सूचकांक क्या है?
pala Febн

मुझे लगता है कि सवाल सिर्फ HTMLInputElement.selectionStart और चयन के लिए पूछ रहा है, जबकि जवाब ज्यादातर चयन घटना के बारे में बात करते हैं। एक उत्तर लिखने का कोई मतलब नहीं है जो अन्य सभी उत्तरों में शामिल है, हालांकि।
जॉली जोकर

जवाबों:


24

यह पृष्ठ पर सभी textarea तत्वों के लिए माउस और कीबोर्ड के साथ पाठ चयन के लिए काम करेगा। चयनकर्ता को बदलने के लिए या तो और अधिक विशिष्ट होना सुनिश्चित करें और यदि आप कीबोर्ड चयन नहीं चाहते हैं तो टिप्पणी पढ़ें।

var mySelection = function (element) {
    let startPos = element.selectionStart;
    let endPos = element.selectionEnd;
    let selectedText = element.value.substring(startPos, endPos);

    if(selectedText.length <= 0) {
      return; // stop here if selection length is <= 0
    }
    
    // log the selection
    console.log("startPos: " + startPos, " | endPos: " + endPos );
    console.log("selectedText: " +  selectedText);

  };

var textAreaElements = document.querySelectorAll('textarea');
[...textAreaElements].forEach(function(element) {
    // register "mouseup" event for the mouse
    element.addEventListener('mouseup', function(){
        mySelection(element)
    });
    
    // register "keyup" event for the keyboard
    element.addEventListener('keyup', function( event ) {
        // assuming we need CTRL, SHIFT or CMD key to select text
        // only listen for those keyup events
        if(event.keyCode == 16 || event.keyCode == 17 || event.metaKey) {
            mySelection(element)
        }
    });
});
textarea {
   resize: none; 
   width: 50%;
   height: 50px; 
   margin: 1rem auto;
}
<textarea>I am a student and I want to become a good person</textarea>


2
काफी साफ़। +1
सहारा

2
यदि आप माउस के बजाय कीबोर्ड का उपयोग करते हैं तो यह आग नहीं करता है।
जिज्ञासु ने

1
@ curiousdannii मैंने जवाब अपडेट कर दिया है, अब यह कीबोर्ड चयन के साथ भी काम करता है
कार्मेबा

5

मैं एक ही प्राप्त करने के लिए onselect घटना का उपयोग करूँगा

<textarea id="input-text" onselect="myFunction(event)">I am a student and I want to become a good person</textarea>


<script>
    function myFunction(event) {
      const start  = event.currentTarget.selectionStart;
      const end= event.currentTarget.selectionEnd;
    }
</script>

1
    var idoftextarea='answer';
    function getSelectedText(idoftextarea){
        var textArea = document.getElementById(idoftextarea);
        var text =textArea.value;
        var indexStart=textArea.selectionStart;
        var indexEnd=textArea.selectionEnd;
        alert(text.substring(indexStart, indexEnd));

    }


    getSelectedText(idoftextarea);


1

कारम्बा के उत्तर ने बहुत अच्छा काम किया, हालाँकि मेरे पास यह मुद्दा था कि यदि आपने कुछ पाठ का चयन किया और पाठ के बाहर माउस जारी किया , तो घटना आग लग गई।

इसे हल करने के लिए मैंने प्रारंभिक घटना को बदल दिया mousedown, यह घटना mouseupदस्तावेज़ पर एक घटना दर्ज करती है ताकि यह सुनिश्चित किया जा सके कि कर्सर जारी होने के बाद यह आग लग जाए। यह mouseupघटना तब निकाल दी जाती है जब उसे निकाल दिया जाता है।

यह onceविकल्प को जोड़ने के साथ प्राप्त किया जा सकता है addEventListener, लेकिन दुख की बात यह है कि IE11 में समर्थन नहीं किया गया है यही कारण है कि मैंने स्निपेट में समाधान का उपयोग किया है।

var mySelection = function (element) {
    let startPos = element.selectionStart;
    let endPos = element.selectionEnd;
    let selectedText = element.value.substring(startPos, endPos);

    if(selectedText.length <= 0) {
      return; // stop here if selection length is <= 0
    }
    
    // log the selection
    console.log("startPos: " + startPos, " | endPos: " + endPos );
    console.log("selectedText: " +  selectedText);
};

function addSelfDestructiveEventListener (element, eventType, callback) {
    let handler = () => {
        callback();
        element.removeEventListener(eventType, handler);
    };
    element.addEventListener(eventType, handler);
};

var textAreaElements = document.querySelectorAll('textarea');
[...textAreaElements].forEach(function(element) {
    // register "mouseup" event for those
    element.addEventListener('mousedown', function(){
      // This will only run the event once and then remove itself
      addSelfDestructiveEventListener(document, 'mouseup', function() {
        mySelection(element)
      })
    });
    
    // register "keyup" event for the keyboard
    element.addEventListener('keyup', function( event ) {
        // assuming we need CTRL, SHIFT or CMD key to select text
        // only listen for those keyup events
        if(event.keyCode == 16 || event.keyCode == 17 || event.metaKey) {
            mySelection(element)
        }
    });
});
textarea {
   resize: none; 
   width: 50%;
   height: 50px; 
   margin: 1rem auto;
}
<textarea>I am a student and I want to become a good person</textarea>


मुझे पसंद है कि आपने कैसे लागू किया addSelfDestructiveEventListener!
22 अप्रैल को कारम्बा

0
var mySelection = function (element) {
let startPos = element.selectionStart;
let endPos = element.selectionEnd;
let selectedText = element.value.substring(startPos, endPos);

if(selectedText.length <= 0) {
  return; // stop here if selection length is <= 0
}

// log the selection
console.log("startPos: " + startPos, " | endPos: " + endPos );
console.log("selectedText: " +  selectedText); };var textAreaElements = document.querySelectorAll('textarea'); 
[...textAreaElements].forEach(function(element) {
// register "mouseup" event for the mouse
element.addEventListener('mouseup', function(){
    mySelection(element)
});
// register "keyup" event for the keyboard
element.addEventListener('keyup', function( event ) {
    // assuming we need CTRL, SHIFT or CMD key to select text
    // only listen for those keyup events
    if(event.keyCode == 16 || event.keyCode == 17 || event.metaKey) {
        mySelection(element)
    }
});});

क्या आप कृपया थोड़ा स्पष्टीकरण जोड़ सकते हैं कि आप क्या करते हैं?
राचेल मैकगिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.