2010-09-20 5 views
15

versuchen, eine anständige, Cross-Browser-Methode zum Erlangen von Attributen mit Javascript zu bestimmen? gehe davon aus, dass die Benutzung der Javascript-Bibliothek (jQuery/Mootools/etc.) keine Option ist.Cross-Browser, Javascript getAttribute() -Methode?

Ich habe Folgendes versucht, aber ich bekomme häufig "Attribute" ist Null oder kein Objektfehler, wenn IE versucht, die "else" -Methode zu verwenden. Kann jemand helfen?

<script type="text/javascript"> 
//... 
    getAttr: function(ele, attr) { 
     if (typeof ele.attributes[attr] == 'undefined'){ 
     return ele.getAttribute(attr); 
     } else { 
     return ele.attributes[attr].nodeValue; 
     } 
    }, 
//... 
</script> 


<div> 
<a href="http://www.yo.com#foo">Link</a> 
</div> 

unter Verwendung der oben html, in jedem Browser, wie kann ich GetAttr (Ele, 'href')? (Angenommen, der ele-Knoten ist kein Problem)

Antwort

10

Hinsichtlich Ihrer Frage des Update, könnten Sie dies versuchen.

Es mag übertrieben sein, aber wenn getAttribute() und die Punktnotation kein Ergebnis zurückgeben, iteriert es durch das Objekt attributes, um zu versuchen, eine Übereinstimmung zu finden.

Beispiel:http://jsfiddle.net/4ZwNs/

var funcs = { 
    getAttr: function(ele, attr) { 
     var result = (ele.getAttribute && ele.getAttribute(attr)) || null; 
     if(!result) { 
      var attrs = ele.attributes; 
      var length = attrs.length; 
      for(var i = 0; i < length; i++) 
       if(attrs[i].nodeName === attr) 
        result = attrs[i].nodeValue; 
     } 
     return result; 
    } 
}; 

var result = funcs.getAttr(el, 'hash'); 

Es liegt an Ihnen einige Cross-Browser-Tests zu tun, wenn. : O)


Mit ele.attributes, müssen Sie sie durch den Index zuzugreifen, wie in:

ele.attributes[0].nodeName; // "id" (for example) 
ele.attributes[0].nodeValue; // "my_id" (for example) 

Versuch attributes ein Attributname, dessen Wert zurückzukehren scheint passieren typeof ist object, so dass Ihr else Code läuft, obwohl ele.attributes[attr] Ihnen nicht den Wert gibt, den Sie wollen.

+0

Ich habe die Frage aktualisiert, um etwas genauer zu sein. Wie würde ich angeben, dass ich die attr "href" oder "hash" mit Ihrer Methode möchte? – tester

+0

@tester - Ich werde in einer Minute aktualisieren. – user113716

+0

große Werke in Chrom/FF, Prüfung in IE8, erhalte ich: Objekt diese Eigenschaft oder diese Methode auf dieser Linie nicht unterstützt: var result = ele.getAttribute (attr) || ele [attr] || Null; – tester

5

Sie versuchen, auf die Eigenschaften von ele zuzugreifen, bevor Sie festgestellt haben, ob diese Eigenschaften vorhanden sind. Versuchen Sie, diese Art von Beweisen Kette:

if (ele.attributes && ele.attributes[attr] && typeof ele.attributes[attr] == 'undefined') 

usw.

+0

Ich nehme an, das wird mein Fehler (und Danke) loswerden, aber wie gesagt, ich habe meine Methode $ .getAttr ($ anchor, 'href'); Wie bekomme ich die href von einem in IE6-8? – tester

+0

Sorry, ich bin mir nicht sicher, was du fragst. – Robusto

+0

Ich habe den unteren Teil der Frage aktualisiert, um anzugeben, was ich versuchen möchte (die href eines ausgewählten Links). – tester

16

Für die überwiegende Mehrheit der Fälle können Sie einfach die eingebaute getAttribute Funktion verwenden.

z.B.

ele.getAttribute(attr) 

Nach QuirksMode dies sollte auf allen gängigen Browsern (IE> = 6 enthalten), mit einer kleinen Ausnahme:

In IE5-7, den Zugriff auf das style Attribut ein Objekt gibt, und den Zugriff auf die onclick Attribut gibt eine anonyme Funktion um den tatsächlichen Inhalt gewickelt.

Verwandte Themen