Andreas Dölling: Problem fast gelöst, aber nicht sicher erklärt

Beitrag lesen

Hallo,

da ich den Verdacht habe, daß das Problem darin besteht, wie die Browser einen TABLE-Knoten intern abbilden und ob sie ggf. ein TBODY automatisch ergänzen oder nicht, habe ich meinen Ansatz dahingehend abgewandelt, daß ich nun über die einzelnen TD-Knoten gehe und dort jeweils die Ersetzungen vornehme.

Das klappt nun auch im IE und in Opera.

Das einzige noch bestehende Problem, ist, daß sowohl IE als auch Opera den Array mit den Suchbegriffen nicht so sortieren, wie ich das möchte.
Angenommen, wir haben die Suchbegriffe "Arbeit", "Beispiel" und "Arbeitsschutz". Dann müßte nach dem lexikalischen Sortieren die Reihenfolge sein: "Arbeit", "Arbeitsschutz", "Beispiel" (machen alle Browser richtig).
Und nach dem zweiten Sortiervorgang mit der Funktion termSort(): "Arbeitsschutz", "Arbeit", "Beispiel" (macht nur Firefox richtig.

Woran kann das denn liegen? Ideen?

Hier der - fast - funktionierende abgeänderte Quellcode:

var inputObj = document.getElementById('search');
 var termsRegExp = new RegExp('(?:\*|")([^\*]*)(?:\*|")', 'gi');
 var sortRegExp;
 var matches;
 var searchTerms = new Array();
 var tableObj = document.getElementById('oneColumn').getElementsByTagName('table')[0];
 var tdColl = tableObj.getElementsByTagName('td');
 var i, k;
 var contentFragments;
 var tmpContent = '';

function termSort(a, b) {
  sortRegExp = new RegExp(b, 'i');
  if(sortRegExp.test(a)) {
   return -1;
  } else {
   return 0;
  }
 }

while(matches = termsRegExp.exec(inputObj.value)) {
  searchTerms[searchTerms.length] = matches[1];
 }

searchTerms.sort();    // first sort lexically
 searchTerms.sort(termSort);  // push words before the terms they contain (e.g. 'Arbeitssicherheit' must precede 'Arbeit')

for(i=0; i<tdColl.length; i++) {
  tmpContent = tdColl[i].innerHTML;
  for(k=0; k<searchTerms.length; k++) {
   contentFragments = tmpContent.split(searchTerms[k]);
   tmpContent = contentFragments.join('<span class="marker">' + searchTerms[k] + '</span>');
  }
  tdColl[i].innerHTML = tmpContent;
 }

Thanx und ciao,
Andreas

--
"Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)