setAttributeNode() im IE
Gerd Gruber
- javascript
Hallo Leute,
Ich habe folgendes Problem und wende mich deshalb wieder mal an euch Super-coder:
Wie kann ich einen angeblichen JavaScriptfehler beim IE umgehen?
Ich habe folgendes kleines HTML-File:
<html><head><title>Test</title></head>
<body>
<h1>Element ohne Eigenschaften?</h1>
<script type="text/javascript">
<!--
var Ausrichtung = document.createAttribute("align");
Ausrichtung.nodeValue = "xenter";
document.getElementsByTagName("h1")[0].setAttributeNode(Ausrichtung);
alert('Hallo');
//-->
</script>
</body></html>
Da "xenter" natürlich ein falscher Wert für das Attribut "align" ist, bricht der IE den Code mit einem Fehler (ungültiges Argument) einfach ab. Das alert (und auch kein nachfolgender Code) wird nicht ausgeführt.
Der Netscape 6 lässt sich dadurch nicht beirren. Dieser erkennt, dass der Attributwert Blödsinn ist, belässt den Tag h1 beim Attribut "align" im Standardwert (left) und lässt den nachfolgenden Code weiter ablaufen.
Wie kann ich dies auch beim IE erreichen?
Da die Attributwerte bei meinem Projekt dynamisch von usern erstellt werden, kann ich nicht alle Möglichkeiten prüfen, ob bei einem bestimmten Attribut die Angabe korrekt ist.
Vielen Dank schon im voraus.
Bin wirklich gespannt ob mir jemand bei diesem Problem weiterhelfen kann.
Mit freundlichen Grüßen
Gerd
Hallo,
Der Netscape 6 lässt sich dadurch nicht beirren. Dieser erkennt, dass der Attributwert Blödsinn ist, belässt den Tag h1 beim Attribut "align" im Standardwert (left) und lässt den nachfolgenden Code weiter ablaufen.
Wie kann ich dies auch beim IE erreichen?
document.getElementsByTagName("h1")[0].setAttribute("align","xenter");
liefert mit "xcenter" statt center keinen Fehler und aendert an nichts an der Ausgabe.
MfG, Thomas
Hallo,
Der Netscape 6 lässt sich dadurch nicht beirren. Dieser erkennt, dass der Attributwert Blödsinn ist, belässt den Tag h1 beim Attribut "align" im Standardwert (left) und lässt den nachfolgenden Code weiter ablaufen.
Wie kann ich dies auch beim IE erreichen?
document.getElementsByTagName("h1")[0].setAttribute("align","xenter");
liefert mit "xcenter" statt center keinen Fehler und aendert an nichts an der Ausgabe.
MfG, Thomas
Vielen Dank für die schnelle Antwort. Leider funktioniert dies nicht für alle Attribute. Z. B:
<body>
<table border="3" bordercolor="#ff0000" width="100%">
<tr><td ID="test1"> test</td><td> test2</td></tr>
<tr><td ID="test2"> test3</td></tr>
</table>
<script type="text/javascript">
<!--
var Ausrichtung = document.createAttribute("align");
Ausrichtung.nodeValue = "center";
//document.getElementById("test2").setAttributeNode(Ausrichtung);
document.getElementById("test2").setAttribute("align","center");
document.getElementById("test2").setAttribute("colspan","2");
alert('Hallo');
//-->
</script>
</body></html>
Für das Attribut align funktioniet dies hier. Für das Attribut colspan leider nicht.
IE will bei diesem (und auch anderen) Attribut, dass es zuerst mal erzeugt wird. Also:
var Ausrichtung = document.createAttribute("colspan");
Ausrichtung.nodeValue = "2";
document.getElementById("test2").setAttributeNode(Ausrichtung);
und das gewünschte klappt.
Leider kann man das Attribut nicht als leeres Attribut erstellen.
nodeValue muss einen korrekten Wert haben. Und schon sind wir leider wieder beim Ausgangspunkt des Problemes.
Aber vielen Dank für deine Hilfe.
Vielleicht fehlt dir noch ein guter Gedanke dazu ein.
freundliche Grüße
Gerd
Hallo,
Für das Attribut align funktioniet dies hier. Für das Attribut colspan leider nicht.
Setze mal den (optionalen) dritten Parameter auf true:
document.getElementById("test2").setAttribute("colspan","2","true");
MfG, Thomas
Hallo,
Für das Attribut align funktioniet dies hier. Für das Attribut colspan leider nicht.
Setze mal den (optionalen) dritten Parameter auf true:
document.getElementById("test2").setAttribute("colspan","2","true");
MfG, Thomas
Hallo Thomas,
vielen Dank. Dies funktioniert.
Leider kannte ich diesen dritten Parameter nicht.
Der ist auch nicht hier im SelfHTML beschrieben.
Wo hast du diese Information vom existierenden dritten Parameter her?
Freundliche Grüße
Gerd
Da die Attributwerte bei meinem Projekt dynamisch von usern erstellt werden, kann ich nicht alle Möglichkeiten prüfen, ob bei einem bestimmten Attribut die Angabe korrekt ist.
Warum nicht? Du kannst doch einfach überprüfen, ob die Eingabe gleich center oder right oder left ist und andernfalls eine Fehlermeldung und/oder einen Default-Wert setzen.
Da die Attributwerte bei meinem Projekt dynamisch von usern erstellt werden, kann ich nicht alle Möglichkeiten prüfen, ob bei einem bestimmten Attribut die Angabe korrekt ist.
Warum nicht? Du kannst doch einfach überprüfen, ob die Eingabe gleich center oder right oder left ist und andernfalls eine Fehlermeldung und/oder einen Default-Wert setzen.
Die war jetzt nur ein Beispiel von einem Attribut.
Ich kann dies aber nicht generell für alle Attribute machen (color, bgcolor, src, id, colspan, width, border usw. usw.). Da habe ich ja 1000 if abfragen. Ich hoffe doch, dass dies auch anders zu lösen geht.
Trotzdem danke für deine Hilfe,
freundliche Grüße
Gerd