2010-08-23 11 views
5

Ich versuche, ein Stück Text in einem "Textarea" hervorzuheben. Ich habe eine lange Zeichenfolge in diesem TextArea-:Markieren einer Zeichenfolge in einer TextArea

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident 

Und ich habe eine Funktion, die die erste Zeichenfolge Auftreten extrahieren kann, die zwischen den „begin“ und „end“ Vars ist. Zum Beispiel:

extract("ipsum", "consectetur") // This will give: "dolor sit amet," 

Aber, was ich will, ist das Ergebnis der Funktion zu wählen, so dass die resultierende Zeichenfolge „dolor sit amet,“ wird hervorgehoben.

Ist es möglich? Wie kann ich das tun?

Danke,

Grüße.

+0

Mit Hervorhebung, nehme ich an, dass Sie meinen, auszuwählen? –

Antwort

2

Ich erinnere mich, dies vor einer Weile zu sehen ... http://www.din.or.jp/~hagi3/JavaScript/JSTips/Mozilla/Samples/NSHTMLTextAreaElement.htm

Es ist ziemlich kompliziert, und ich konnte nie ganz um ihn herum, meinen Kopf zu bekommen belästigt werden. Weiß nicht, ob Sie das brauchen oder ob Sie es überhaupt benutzen können. :)

+0

netter Thomas. –

+0

Sieht gut aus, aber funktioniert es mit IE 6/7/8? (Kann im Moment nicht getestet werden.) –

+1

Nein, es versucht nicht einmal IE zu unterstützen. –

2

Sie können verschiedene Textteile in einem Textarea nicht markieren. Sie können ein Teil auswählen, aber nicht mehrere Teile, und die Auswahl wird nicht hervorgehoben. Sie können den Inhalt des Textbereiches nehmen und aber ein <div> zum Beispiel und die Phrasen hervorheben, indem sie mit <span class="highlight">...</span>

+0

Das OP wollte nicht die ersten beiden Strings markieren. Er wollte den Text dazwischen hervorheben. – MarkHu

4

Hier Umgebung ist ein Code, der eine Reihe von Text in einem Textfeld in allen gängigen Browsern, einschließlich IE wählen wird 6+ :

function offsetToRangeCharacterMove(el, offset) { 
    return offset - (el.value.slice(0, offset).split("\r\n").length - 1); 
} 

function setSelection(el, start, end) { 
    if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") { 
     el.selectionStart = start; 
     el.selectionEnd = end; 
    } else if (typeof el.createTextRange != "undefined") { 
     var range = el.createTextRange(); 
     var startCharMove = offsetToRangeCharacterMove(el, start); 
     range.collapse(true); 
     if (start == end) { 
      range.move("character", startCharMove); 
     } else { 
      range.moveEnd("character", offsetToRangeCharacterMove(el, end)); 
      range.moveStart("character", startCharMove); 
     } 
     range.select(); 
    } 
} 

var textarea = document.getElementById("your_textarea"); 
var val = textarea.value; 
var start = val.indexOf("ipsum") + 5, end = val.indexOf("consectetur"); 
setSelection(textarea, start, end); 
+0

Alles gut außer dem '+ 5' Klud, der vermutlich die Länge der ersten Saite ist. Dies ist sehr ähnlich zu einem Algorithmus in einer der Antworten zu http://stackoverflow.com/questions/1981088/set-textarea-selection-in-internet-explorer – MarkHu

+0

@MarkHu: Ja, die '+ 5' ist genau das , um es kurz zu machen. Es scheint ein bisschen komisch, "ipsum" .length stattdessen zu verwenden. Die Ähnlichkeit mit der anderen Antwort, die ich denke, kann ein Fall dieser Antwort sein, die von einem von mir borgt ([dieser] (http://stackoverflow.com/questions/3622818/ies-document-selection-createrange-doesnt-include- Leading-oder-Trailing-Blank-li) zum Beispiel). –

Verwandte Themen