Hallo Knud,
ich habe schon im Archiv gestöbert aber leider keine Lösung für mein Problem gefunden:
Da scheint ja mal jemand die FAQ gelesen zu haben. Lasst uns feiern ;-)
Ich möchte mit der JS-Funktion find() eine HTML-Seite durchsuchen und möchte, dass der gefundene Begriff markiert wird (wie bei Strg+F).
Das geht sehr schön über DOM. Da NC4 allerdings kein DOM unterstützt, solltest du alternativ für diesen Browser noch die find() Methode verwenden (mit einer Browser-Weiche). Für andere Browser kannst du folgenden Code verwenden
<script language="JavaScript">
<!--
/* gibt das erste öffnende oder leere HTML-Element zurück,
das in ausgeschriebener HTML-Form irgendwie hinter dem
Element element kommt. Immer mit followChildren = true
aufrufen
*/
function naechstes(element,followChildren) {
if (followChildren && element.firstChild != null) return element.firstChild;
if (element.nextSibling != null) return element.nextSibling;
if (element.parentNode != null) return naechstes(element.parentNode,false);
return null;
}
/* Sucht in der aktuellen Datei nach Vorkommnissen des
Suchstrings suchstring und findet diesen auch, wenn
er über mehrere Text-Nodes reicht. Unterscheidet
Groß/Kleinschreibung. Wenn das verhindert werden soll,
muss sowohl suchstring, als auch text mit toLowerCase()
in Kleinbuchstaben umgewandelt werden.
*/
function finden(suchstring) {
aktElement = document.getElementsByTagName("body")[0];
gefunden = -1;
do {
text = "";
while (aktElement != null && aktElement.nodeType != 3) {
aktElement = naechstes(aktElement,true);
}
startElement = aktElement;
KnotenIndizes = new Array();
i = 0;
while (aktElement != null && aktElement.nodeType == 3) {
KnotenIndizes[i] = text.length;
text += aktElement.data;
aktElement = naechstes(aktElement,true);
i++;
}
KnotenIndizes[i] = text.length;
gefunden = text.indexOf(suchstring)
} while (gefunden == -1 && aktElement != null);
if (gefunden != -1) {
i = 1;
while (KnotenIndizes[i] < gefunden) {
i++;
startElement = naechstes(startElement,true);
}
var neuB = document.createElement("span");
neuB.style.color = "#d50000";
neuB.style.fontWeight = "bold";
neuB.style.backgroundColor = "#FAF1B1";
/* Hier die Hervorhebung anpassen */
neuB.appendChild(document.createTextNode(suchstring));
vortext = startElement.nodeValue.substr(0,gefunden-KnotenIndizes[i-1]);
startElement.nodeValue = startElement.nodeValue.substr(gefunden-KnotenIndizes[i-1]+suchstring.length,KnotenIndizes[i]-gefunden-suchstring.length);
startElement.parentNode.insertBefore(neuB,startElement);
startElement.parentNode.insertBefore(document.createTextNode(vortext),neuB);
}
}
//-->
</script>
Viel Erfolg,
Robert