Christoph Zurnieden: Suchfunktion

Beitrag lesen

Hi,

Ich möchte die aber untereinander haben. Hab schon einiges ausprobiert.
Umwandeln in einen String(join()), mit replace() die Kommas in Zeilenumbrüche umwandeln.
Aber es wird immer nur im String ausgebeben(ergebnis1<br>ergebnis2<br>...),(ergebnis1\nergebnis2\n...).

Da bräuchte ich denn doch mal die genaue Ausgaberoutine, denn mit document.write wie am Anfang würde es einwandfrei funktionieren.
Hatte ich Dir nicht noch die showHit() Routine gegeben? Da schau einmal rein, wie das mit DOM gemacht wird. Sieht etwas kompliziert aus, ist es aber überhaupt nicht, ausnahmsweise völlig logisch aufgebaut.

die Funktion showHit(var) fügt innerhalb das Elementes mit der ID "hitlist" erst einen erzwungenen Zeilensprung an das Ende des Inhaltes sowie direkt an den Anschluß den Textknoten(!) "var".

function showHit(_Hit){
  var temp1;
  var temp2;
  // Ich arbeite gerne mit einer lokalen Kopie, aber
  // das ist Geschmacksache, funktioniert auch ohne.
  var Hit = _Hit;

// Man muß die einzelnen Knoten vor der Benutzung
  // erstmal erzeugen.
  // das Element "br"
  temp1 = document.createElement("br");
  // der Textknoten(!)
  temp2 = document.createTextNode(Hit);
  // element.appendChild(node) fügt den Knoten "node"
  // an's Ende des Inhalts des Knotens mit der ID
  // "hitlist"
  document.getElementById("hitlist").appendChild(temp1);
  document.getElementById("hitlist").appendChild(temp2);
}

Da showHit(var) "var" in einen Textknoten schreibt kannst Du da Elemente reinshreiben wie Du lustig bist, das wird als einfacher String -- als Textknoten ausgegeben. Wenn Du also z.B. zwischen jedem Mitglied Deines Ergebnisarrays ein Zeilensprung einfügen möchtest, dann mußt Du in einer kleinen Schleife für jedes Mitglied im Array die Funktion showHit() aufrufen.

for(var i=0;i< ergebnissarray.length;i++){
  showHit(ergebnissarray[i]);
}

Möchtest Du die Ergebnissliste anders formatieren (Du hattest "bold", gelle?), dann mußt Du den Code von showHit() ändern. Wenn Du die Einträge einzeln formatieren möchtest werden die Eintragsknoten zu Kindern des Formatknotens. Beispiel:

function showHit(_Hit){
  var temp1;
  var temp2;
  var Hit = _Hit;

// bis hierhin noch gleich: Du erzeugst den
  // Elementknoten "b" für "bold"
  temp1 = document.createElement("b");
  // und den Textknoten
  temp2 = document.createTextNode(Hit);
  // im Gegensatz zur ersten Version, muß hier der
  // Textknoten "tmp2" _in_ den Elementknoten "tmp1"
  tmp1.appendChild(tmp2);
  // dann wieder das ganze Geraffel an's Ende des
  // Ergebniscontainers.
  document.getElementById("hitlist").appendChild(temp1);
}

Dann brauchst Du auch den kleinen Loop oben nicht, denn der würde so etwas wie "<b>eins</b><b>zwei</b> ... " erzeugen. Das erscheint mir doch ein wenig redundant ;-)

Du könntest natürlich auch alles in ein "span" packen udn dann per CSS formatieren, das Du evt auch noch showHit() als zweites Argument beigibst. Ein Attribut wird eigentlich genauso erzeugt wie ein Element:

var spanNode       = document.createElement("span");
// Attribute "style" erzeugen
var attStyle       = document.createAttribute("style");
// Das Attribut mit Werten belegen
attStyle.nodeValue = "background-color:green;" +
                     "color:red;";
// Das Attribut einem Element, hier: "spanNode" zufügen.
spanNode.setAttributeNode(attStyle);

so short

Christoph Zurnieden