Knud: find() mit highlight

Einen wunderschönen guten Morgen wünsche ich,

ich habe schon im Archiv gestöbert aber leider keine Lösung für mein Problem gefunden:

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).
Altrnativ wäre ich auch mit einem Button zufrieden, der mir die Funktion Strg+F aufruft und den Inhalt eines anderen Frames durchsucht.

Ich habe von JS leider sehr wenig Ahnung... kann maximal leichte Scripte anpassen. Mir hilft also kein Fachchinesisch oder aus dem Zusammenhang gerissene Programmzeilen.

Für Tips wäre ich sehr dankbar... danke schon mal und schöne Feiertage... Knud

  1. 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