Munshta: Browserübergr.: Von/Bis Position innerhalb Textarea markieren

Beitrag lesen

»» Also: Kennt jemand 'ne Möglichkeit von Zeichen sowieso bis Zeichen sowieso innerhalb einer Textarea zu markieren. Das ganze müsste natürlich trotz den verschiedenen Markierungsobjekten der Browser browserübergreifend funktionieren.

Fünf-Minuten-Schnellschuss:

<!DOCTYPE html>

<html><body>

<textarea id="t" cols="60" rows="25">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, ...</textarea>

<script>
var tA = document.getElementById('t');
textareaSelect(tA, 10, 15);

[code lang=javascript]function textareaSelect (tA, startPos, endPos) {
if (typeof tA.selectionStart != "undefined") {
tA.selectionStart = startPos;
tA.selectionEnd = endPos;
} else if (tA.createTextRange) {
var r = tA.createTextRange();
r.collapse(true);
r.moveStart('character', startPos);
r.moveEnd('character', endPos - startPos);
r.select();
}
}


> </script>  
>   
> </body></html>[/code]  
>   
> Nicht-IE-Browser kennen selectionStart und selectionEnd, für den IE verwendet man TextRanges.  
>   
> Probiere mal damit herum, ich nehme an, da ist noch etwas Optimierungsbedarf, aber das Prinzip dürfte klar sein.  
>   
> Mathias  
  
Hi,  
tut mir leid, dass ich erst heute zum lesen der Antworten gekommen bin. Ich war gestern ganztägig mit einer Betriebsfeier, einem Clubtreffen und der Arbeit beschäftigt.  
Ich hab es jetzt dafür gleich ausprobiert: Passt wie angegossen!  I'm froh ;-)  
  
Hier noch mein leicht angepasstest Script:  
~~~javascript
  
function markieren(Index, Pruefen) {  
  var Start = altStart[Index];  
  if(!Start)  
    Start = 0;  
  if(Pruefen != false && !new RegExp(Suchtext,document.getElementById('GrossKlein').checked ? '' : 'i').test(document.getElementsByName('eingabe')[0].value.slice(Start))) {  
    if(confirm('Leider wurde keine weiteren Treffer zu ihrem Suchtext ("'+orgSuche+'") gefunden.\n\nWollen Sie eine neue Suche beginnen?'))  
      einblenden('Suchen');  
    return false;  
  }  
  }  
  
  var input = document.getElementsByName('eingabe')[0];  
  var inpInhalt = input.value.slice(Start);  
  
  var Ende = new RegExp(Suchtext,document.getElementById('GrossKlein').checked ? '' : 'i');  
  var Anfang = Start+inpInhalt.search(Ende);  
      Ende = Ende.exec(inpInhalt)[0].length;  
  
      anCounter = Index;  
      altStart[anCounter+1] = Anfang + Ende;  
  
  if(typeof input.selectionStart != "undefined") {  
        input.selectionStart = Anfang;  
        input.selectionEnd = nextStart;  
  }  
  else  
    if(input.createTextRange) {  
      var range = input.createTextRange();  
          range.collapse(true);  
          range.moveStart('character', Anfang);  
          range.moveEnd('character', Ende);  
          range.select();  
    }  
}  

Vielen Dank, Mathias
Munshta