Gunnar Bittersmann: Seltsames Verhalten von IE bei getAttribute('xml:lang')

Beitrag lesen

@@Gunnar Bittersmann:

eine andere Schreibweise für 'el[i].lang' ist 'el[i]["lang"]'.
Diese wäre auch für das 'xml:lang'-Attribut zu gebrauchen

Nicht im Firefox. (Grmpf, hätte ich erstmal testen sollen.)

Da kommste wohl um eine doppelte Abfage nicht drumrum:
var lang = element.getAttribute("xml:lang") || element["xml:lang"];

Mit der Abfrage nach 'lang'-Attribut kombiniert ('xml:lang' hat Vorrang):
var lang = element.getAttribute("xml:lang") || element["xml:lang"] || element.lang;

Das brauchst du aber nur für XHTML-Dokumente, für HTML reicht
var lang = element.lang;

Die Unterscheidung, ob es XHTML oder HTML ist, kannste anhand des in XHTML vorhandenen 'xmlns'-Attributs des 'html'-Elements vornehmen und, damit du sie nur einmal tätigen musst, deren Ergebnis in einer Variablen speichern:
var isXHTML = !!document.body.parentNode.getAttribute("xmlns");

Genaugenommen müsstest du aber auch prüfen, ob XHTML als XML verarbeitet wird, da bei der Verarbeitung als HTML das 'xml:lang'-Attribut keinerlei Wirkung hat. Das ist möglich im XHTML-Dokument:
<script type="text/javascript">[code lang=javascript]var isXML = ("&auml;" == "ä");<script>[/code]

Beides zusammen:
var isXHTMLplusXML = isXHTML && isXML;

Später damit dann
var lang = isXHTMLplusXML ? element.getAttribute("xml:lang") || element["xml:lang"] || element.lang : element.lang;

Live long and prosper,
Gunnar

--
„Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)