juppinger: In vorhandenen Textknoten einen Link einfügen (DOM)

Beitrag lesen

Hallo zusammen,

vielen Dank erstmal für alle, die mir geschrieben haben.
Aus diesen Antworten bin ich jetzt viel weiter gekommen und bin quasi *fast* fertig.

Ich möchte mit DOM bestimmte Wörter (aus einem Array) in Texten einer Webseite nachträglich mit einem Link versehen.

Das funktioniert soweit auch ganz gut - aber leider nur das 1. Wort wird ersetzt. Dananch kommt ein JS-Fehler "Ungültiges Argument".

Ich habe den kompletten Code unten angehängt und wäre suuuper dankbar, wenn Ihr mir helfen könntet. Bin am verzweifeln :-[

Gruss + 1000 Dank
Juppinger

-------------------------------------------------------------
  Mein Code:
-------------------------------------------------------------
<html>
<head>
</head>
<body>

<h1>Die Grundidee ...</h1>

... beim CrossGolf (geschrieben auch: X-Golf) ist es, alles das, was den normalen Golfsport ziemlich uninteressant macht wegzulassen: blasierte Etikette, spiessige Kleiderordnungen, kleinliches Regelwerk, hohe Mitlgliedsbeiträge und elitäres Clubhaus-Gehabe. Statt dessen geht man einfach locker „ein paar Bälle verschicken“.
Ausgerüstet mit Secondhand-Schläger und -Bällen, werden dann spontan - je nach Gelände - ein paar einfache (oder je nach Stimmungspegel auch völlig schwachsinnige) Regeln klargemacht und los gehts.
Meist reagieren die Leute zwar aufgeschlossen aber etwas skeptisch auf solche Erklärungen. Aber wer einmal (wenigstens halbwegs) den Ball, mit sattem Geräusch und hohem Bogen, getroffen hat, kommt davon nicht mehr los! Irgendwie scheint das süchtig zu machen!?
<br><br>
<button onclick="scantext();">Links einfügen</button>

<script>
 var ArrKeywords = new Array ("X-Golf","Gelände");
</script>

<script language="JavaScript">
<!--
function scantext() {

for(x=0;x<ArrKeywords.length;x++) {
  var n = document.getElementsByTagName("body")[0];
  var ersetzt=0;
  alert('Ersetze: '+ArrKeywords[x]);
  walk_dom(n,ArrKeywords[x]);
 }

function walk_dom(n,keyword) {
 /*
 1 Elementknoten
 2 Attributknoten
 3 Textknoten
 4 Knoten für CDATA-Bereich
 5 Knoten für Entity-Referenz
 6 Knoten für Entity
 7 Knoten für Verarbeitungsanweisung
 8 Knoten für Kommentar
 9 Dokument-Knoten
 10 Dokumenttyp-Knoten
 11 Dokumentfragment-Knoten
 12 Knoten für Notation
 */

if (n.nodeType == 3 /*Node.TEXT_NODE*/)
 {
  var pos = n.data.search(keyword);
  var pnt = n.parentNode.tagName;
  if (ersetzt==0 && pos > -1 && pnt != "A" && pnt != "IMG") {
   txtreplace(n,keyword,pos);
  }
 }
 else
 {
 var kids = n.childNodes;

for(var i = 0; i < kids.length; i++)
 {
  walk_dom(kids[i],keyword);
 }
 }
 }

function txtreplace(n,keyword,pos) {

//alert(n.data);

var objNeuKnoten = document.createElement("span");

// Vor-Text-Knoten erzeugen
  var objTextVor = document.createTextNode(n.data.substr(0,pos));
  // Nach-Text-Knoten erzeugen
  var objTextNach = document.createTextNode(n.data.substr((pos + keyword.length) , n.data.length));
  // Link-Knoten erzeugen
  var objLink = document.createElement("a");
  objLink.setAttribute("href", "http://www.xgolf.net");
  objLink.appendChild(document.createTextNode(keyword));
  // Alle Knoten zusammenfuehren
      objNeuKnoten.appendChild(objTextVor);
      objNeuKnoten.appendChild(objLink);
      objNeuKnoten.appendChild(objTextNach);

document.body.replaceChild(objNeuKnoten, n);
  //document.body.appendChild(objNeuKnoten);      <<<--- DAS KLAPPT EINWANDFREI

ersetzt=1;
 }

}

//-->
</script>

</body>
</html>
-------------------------------------------------------------