tomstig
OC Addicted
|
Bisher hab ich das immer mit innerHTML gelöst, jedoch ist diese Eigenschaft nicht w3c konform und "out of date".
Wenn man aber mit document.getElementById('xx').firstChild.nodeValue bzw. document.getElementById('xx').firstChild.data einen fett gedruckten Text einfügen will (zb "<b>Hallo!</b>"), dann schreibt er Hallo nicht fettgedruckt hin, sondern er schreibt "<b>Hallo!</b>" hin. Gibt es eine Möglichkeit, dass zu machen?
Bearbeitet von tomstig am 28.06.2005, 08:22
|
watchout
Legendundead
|
klar, dazu muss man nur das DOM-Node System verstanden haben. Und eigentlich sagts der Name eh auch schon: "data" - das sind reine (unparsed) Strings, die kommen genau so auf den bildschirm wie man sie reinschreibt. Willst du jetzt einen fetten text, so musst du ein umschliessendes "B" Element generieren: bold = document.createElement('b');
text1 = document.createTextNode('Hallo');
bold.appendChild(text1);
document.getElementById('xx').appendChild(bold);
ich hoffe da is jetz kein Fehler drin alles nachzulesen unter http://de.selfhtml.org/javascript/objekte/index.htm
|
that
ModeratorHoffnungsloser Optimist
|
Bisher hab ich das immer mit innerHTML gelöst, jedoch ist diese Eigenschaft nicht w3c konform und "out of date". Das ist zwar nicht W3C konform aber absolut nicht "out of date", da es alle "gängigen" Browser beherrschen, und es weit einfacher und meistens schneller ist als der DOM-Ansatz.
|
watchout
Legendundead
|
Das ist zwar nicht W3C konform aber absolut nicht "out of date", da es alle "gängigen" Browser beherrschen, und es weit einfacher und meistens schneller ist als der DOM-Ansatz. Man hat einfach viel mehr Möglichkeiten mit Nodes.
|
tomstig
OC Addicted
|
Man hat einfach viel mehr Möglichkeiten mit Nodes. An dieser Stelle wäre ein Beispiel interessant, wo du etwas mit nodes machst, was mit innerHTML nicht möglich ist BTW: Bei meinem Problem, wegen dem ich frage, will ich eigentlich statt einem <input> ein <div style="width: 20px; height: 20px; border: 1px solid #000">
einfügen und umgekehrt. Beispiel gibt es hier: http://tomstig.to.funpic.de/umfrage/add_question.phpWenn man bei den radios auf Bild klickt, soll das <div> erscheinen und bei Text das input...
Bearbeitet von tomstig am 27.06.2005, 19:30
|
tomstig
OC Addicted
|
Hab das ganze mit "display: none" gelöst.
|
watchout
Legendundead
|
An dieser Stelle wäre ein Beispiel interessant, wo du etwas mit nodes machst, was mit innerHTML nicht möglich ist Ändere Attribut X auf Y von Element Z. Füge Attribut X Element Y hinzu. Entferne Attriut X von Element Y. Nimm Element X und verschiebe es in Element Y. Lösche Element X aus Element Y. Wobei der erste Block der Beispiele meines Wissens nach garnicht mit innerHTML lösbar ist, ist der 2. Block nur schwer und in keinem Verhältnis im aufwand (In beiden Fällen 1 Zeile mit Nodes gegen mindestens 1 Schleife mit RegExp mit innerHTML) lösbar.
|
tomstig
OC Addicted
|
Ok, in Sache "Editieren" sind die nodes weltklasse, nur zum lernen sinds einfach zach
|
that
ModeratorHoffnungsloser Optimist
|
In beiden Fällen 1 Zeile mit Nodes gegen mindestens 1 Schleife mit RegExp mit innerHTML Wer innerHTML für was anderes verwendet, als Content hinzuzufügen oder zu ersetzen und womöglich noch mit RegExp anfängt, HTML zu parsen, dem ist eh nicht mehr zu helfen.
|
watchout
Legendundead
|
Wer innerHTML für was anderes verwendet, als Content hinzuzufügen oder zu ersetzen und womöglich noch mit RegExp anfängt, HTML zu parsen, dem ist eh nicht mehr zu helfen. Du hast innerHTML als das "Allheilmittel" angepriesen, nicht ich... Und schon Content ersetzen ist extrem mühsam wenn man den Originaltext nicht kennt. tomstig: Verstehe die Schwierigkeit darin einfach nicht.
|
tomstig
OC Addicted
|
tomstig: Verstehe die Schwierigkeit darin einfach nicht. Beispiel? Du magst ein div einfügen. Das div soll das Attribut "style" beinhalten, welches die Eigenschaften "height: 30px; width: 30px" hat. divnode = document.createElement('div'); //das ist noch logisch...
// wenn man jetzt das attribut hinzufügen will
// geht das (rein vom denkansatz) so:
divnode = document.setAttribute('style', 'height: 30px; width: 30px');
// (^ ja ich weiß, das ist falsch)
// so:
divnode.setAttribute('style', 'height: 30px; width: 30px');
// ... oder überhaupt ganz anders/einfacher?
|
watchout
Legendundead
|
// Elementknoten
x = document.getElementById(...);
// Attributknoten erstellen
att = document.createAttribute('style');
// Wert dem Attributnknoten zuweisen (kann an beliebiger Stelle geschehen)
att.nodeValue = 'height:30px;wid...';
// Attributknoten dem Element zuweisen
x.setAttributeNode(att);
|
that
ModeratorHoffnungsloser Optimist
|
Du hast innerHTML als das "Allheilmittel" angepriesen, nicht ich... Wo? Und schon Content ersetzen ist extrem mühsam wenn man den Originaltext nicht kennt. Den muss ich nicht kennen, den ersetze ich ja. Node finden und innerHTML setzen - weg ist der Originaltext und der neue ist da.
|
watchout
Legendundead
|
Wo? "und es weit einfacher und meistens schneller ist als der DOM-Ansatz." Tatsache ist dass es auf den Anwendungsfall ankommt - In den wenigsten concepts von mir ist innerHTML von irgendeinem Nutzen für mich, deswegen verwende ichs auch überhaupt nicht mehr. Für echtes dynamisches HTML (also mehr als nur ein countdown-timer oder eine blinkende "6") ist innerHTML nicht wirklich brauchbar, ausser man programmiert das DOM in Javascript nach, was dann aber irgendwie schizophren (und vor allem extrem langsam) wär. Den muss ich nicht kennen, den ersetze ich ja. Node finden und innerHTML setzen - weg ist der Originaltext und der neue ist da. gut, da hab ich dich falsch verstanden.
|
that
ModeratorHoffnungsloser Optimist
|
"und es weit einfacher und meistens schneller ist als der DOM-Ansatz." Tatsache ist dass es auf den Anwendungsfall ankommt Stimmt - meine Antwort bezog sich auf den Anwendungsfall im Topic dieses Threads. Die Performancevergleiche sind übrigens hier: http://www.quirksmode.org/dom/innerhtml.html
|