nam: IE und getAttribute

Hallo!

Ich muss mittels Javascript überprüfen ob in einem form-Tag ein Attribut 'lang' vorhanden ist. Wegen IE (<8) kann ich hasAttribute nicht verwenden und versuchte es über !!el.getAttribute('foo').

Nun hat aber der IE bis und mit Version 7 die spezielle Eigenschaft, bei getAttribute nicht nur Attribute sondern auch Kindelemente mit name="foo" zurückzugeben. Im folgenden vereinfachten Bsp. zeigt IE den alert an, alle anderen Browser nicht.

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  
    "http://www.w3.org/TR/html4/strict.dtd">  
<html>  
    <head>  
        <title>Test</title>  
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
        <script type="text/javascript">  
        	window.onload = function() {  
        		var t = document.getElementById("myElem");  
        		if(!!t.getAttribute('lang')) {  
        			alert('getAttribute found:' + t.getAttribute('lang'));  
        		}  
        	};  
        </script>  
    </head>  
    <body>  
    	<h1>Problem in IE</h1>  
		<form action="#" method="POST" id="myElem">  
			<div>  
			<input type="text" name="lang"><span>foobar</span>  
			</div>  
		</form>  
    </body>  
</html>  

Wie kann ich das umgehen?
Dank und Gruss,
Mathias

  1. Hi,

    Ich muss mittels Javascript überprüfen ob in einem form-Tag ein Attribut 'lang' vorhanden ist. Wegen IE (<8) kann ich hasAttribute nicht verwenden und versuchte es über !!el.getAttribute('foo').

    Und einfach element.lang reicht nicht aus, oder liefert nicht das gewünschte?

    Wie kann ich das umgehen?

    Im outerHTML nachschauen?

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi

      Danke für deine Antworten.

      Und einfach element.lang reicht nicht aus, oder liefert nicht das gewünschte?

      Das liefert erst recht das input-Element, was ich an dieser Stelle ja auch noch verstehe…

      Wie kann ich das umgehen?
      Im outerHTML nachschauen?

      Wie meinst du das?

      Gruss,
      Mathias

      1. Hi,

        Und einfach element.lang reicht nicht aus, oder liefert nicht das gewünschte?

        Das liefert erst recht das input-Element, was ich an dieser Stelle ja auch noch verstehe…

        Ach so, das Input selber hat name="lang", das hatte ich übersehen. Ja, dann ist es zumindest halbwegs nachvollziehbar. (Bleibt zu hoffen, dass der IE dann den Inhalt eines eventuell vorhandenen lang-Attributes nicht deswegen schon überschrieben hat - wie es analog bei einem input name="submit" mit der submit-Methode des Formulars passiert.)

        Im outerHTML nachschauen?

        Wie meinst du das?

        outerHTML ist IE-only, und liefert dir analog zu innerHTML den HTML-Inhalt eines Elements - allerdings einschliesslich der Tags des Elements selber. Wenn FORM also ein lang-Attribut hat, sollte es dort auftauchen. (Mit recht liberalem Umgang mit Gross-/Kleinschreibung von Tag- und Attributnamen musst du an der Stelle allerdings rechnen, aber das ist man von innerHTML ja genauso gewohnt.)

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Hi

          outerHTML […] liefert dir […] den HTML-Inhalt eines Elements - allerdings einschliesslich der Tags des Elements selber. Wenn FORM also ein lang-Attribut hat, sollte es dort auftauchen. […]

          Zu umständlich, zu langsam. Diese Überprüfung läuft u.U. auf mehreren hundert Elementen, da kann ich solche Hacks nicht brauchen.

          Trotzdem Danke

          1. Hallo

            Habe dieses blödsinninge Problem noch immer. Hat denn niemand eine Idee?

            Dank und Gruss,
            Mathias

            1. Habe dieses blödsinninge Problem noch immer. Hat denn niemand eine Idee?

              Das ist ein Bug im IE und zwar ein ganz fieser, da er nicht nur das falsche Ergebnis bringt, sondern auch ein richtiges überschreibt. Daher: keine Idee.

              Struppi.