Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Markierten Text auf HTML-Seite per JS ändern
Frage
Ich habe eine Textbox auf einer HTML-Seite, wo ein Benutzer seinen Text eingeben kann. Markiert der benutzer ein Wort in dem Text, und drückt auf einen Button, kann ich per JS herausfinden, welcher String markiert war (kennt ihr von Mr.Check *g*). Ich will jetzt aber per JS auf der Webseite, genau dieses markierte wort ändern lassen, und nur dieses wort. ALso angenommen der String "und" wurde markiert, dann soll auf klicken des buttons nur dieses markierte wort "und" geändert werden, und nur das, und nicht alle anderen davor und danach stehenden "und"s auch. Nur das markierte soll geändert in der Textbox auftauchen. Ausschließlich durch JS.
Für Hilfe bin ich sehr sehr dankbar!
P.S. vielleicht ein ansatz: ist es möglich zudem markierten String noch die genaue Cursorpostion in der Textbox per JS zu ermitteln? dann könnte man von da den String überschreiben...? Ich weiß es nicht
Antwort 1 von struppi
Hallo,
Es gibt ja die Möglichkei mit PasteHTML Textrange-Objecte der HTML-Seite umzuschreiben. Aber die Funktion läßt sich nicht auf ein Textfeld anwenden.
Nun könnte man es sich ja ganz einfach machen und den über das Textrange-Object ausgelesenen Text des Textfeldes in Textfeld.value suchen, herausnehmen und mit Stringfunktionen das ganze zu einem neuen Text verbinden. Problem ist hierbei, wenn der markierte Text mehrmals vorkommt, würde der dann auch ersetzt oder nur der zuerst gefundene...
Vieleicht fällt mir da noch was Gescheites ein.
Vorerst mal ein DEmo wie man ZB in einem IFrame markierte Textteile austauschen kann.
Das ist zwar VBscript geht aber auch durch wenn keine Domänübergriffe stattfinden.
Daraus mußt du eine Html-Seite machen.
Gruß struppi
Es gibt ja die Möglichkei mit PasteHTML Textrange-Objecte der HTML-Seite umzuschreiben. Aber die Funktion läßt sich nicht auf ein Textfeld anwenden.
Nun könnte man es sich ja ganz einfach machen und den über das Textrange-Object ausgelesenen Text des Textfeldes in Textfeld.value suchen, herausnehmen und mit Stringfunktionen das ganze zu einem neuen Text verbinden. Problem ist hierbei, wenn der markierte Text mehrmals vorkommt, würde der dann auch ersetzt oder nur der zuerst gefundene...
Vieleicht fällt mir da noch was Gescheites ein.
Vorerst mal ein DEmo wie man ZB in einem IFrame markierte Textteile austauschen kann.
Das ist zwar VBscript geht aber auch durch wenn keine Domänübergriffe stattfinden.
<html><body>
<h1>Texte ersetzen</H1><hr>
<iframe name="ifr2" src="about:<h2><font face='arial' color='blue'>Wo gibt es kostenlose Hilfe?</font><h2>" height=300 width=300>
</iframe>
<iframe name="ifr" src="about:<A HREF=VBscript:parent.document.ifr2.document.selection.createRange.pasteHTML(parent.document.forms(0).elements(0).value)' >Im linken Fenster ein Wort markieren und hier clicken</A>" height=300 width=300>
</iframe>
<form>
<input type=hidden name="S1" value="<a href='https://supportnet.de'>Hier klicken</a>" ></textarea>
</form></body></html>
Daraus mußt du eine Html-Seite machen.
Gruß struppi
Antwort 2 von struppi
Hier mal die simple Lösung, die alle gleichlautenden Texteile ersetzt:
Auch dieser Code geht wie JS durch.
Gruß struppi
<form>
<input name="b1" Type=text value="fgfgdgfhfghkhkjghäjkghmgnh g. ggähjlk,gähj">
</form>
<script language="vbscript">
function selektierterText()
a = document.selection.createRange().text
b = document.forms(0).elements("b1").value
c = replace(b,a,"KUKUK")
document.forms(0).elements("b1").value = c
end function
</script>
<body>
...
<INPUT TYPE="button" VALUE="KUKUK in den Text schreiben" onMouseDown="vbscript:selektierterText()">
...
</body>
Auch dieser Code geht wie JS durch.
Gruß struppi
Antwort 3 von struppi
Noch ein Vorschlag:
In folgendem Code befindet sich ein Textfeld und ein Iframe.
Jetzt kannst Du im Textfeld schreiben.
Text wird über event ins Iframe geschrieben.
Jetzt im Iframe!! textstelle markieren und Button drücken.
Diesmal wird exakt der Teil im Textfeld ersetzt.
Wie gesagt ein Kompromiss weil man nicht direkt ans Textfeld ran kommt.
Gruß struppi
In folgendem Code befindet sich ein Textfeld und ein Iframe.
Jetzt kannst Du im Textfeld schreiben.
Text wird über event ins Iframe geschrieben.
Jetzt im Iframe!! textstelle markieren und Button drücken.
Diesmal wird exakt der Teil im Textfeld ersetzt.
Wie gesagt ein Kompromiss weil man nicht direkt ans Textfeld ran kommt.
<form>
<input name="b1" onkeypress="vbscript:ifvis()" Type=text size="50">
</form>
<iframe name="ifr2" src="" height=200 width=200></iframe>
<script language="vbscript">
function selektierterText()
parent.document.ifr2.document.selection.createRange.pasteHTML("KUKUK")
document.forms(0).elements("b1").value = parent.document.ifr2.document.body.outertext
end function
function ifvis()
parent.document.ifr2.location = "about:" & document.forms(0).elements("b1").value
end function
</script>
<body>
<INPUT TYPE="button" VALUE="KUKUK in den Text schreiben" onMouseDown="vbscript:selektierterText()">
</body>
Gruß struppi

