2013-05-11 16 views
5

Manchmal muss ich den berechneten Wert des HTML-Attributs lang (die Sprache des Elements) herausfinden. Ich benutze jQuery. Zum Beispiel in dem folgenden Code würde Ich mag die berechneten lang das <p> Element kennen, und ich würde den Wert he erwarten:Wie kann man den berechneten Wert des lang-Attributs eines Elements in JavaScript herausfinden?

<!DOCTYPE html> 
<html lang="en" dir="ltr"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>lang test</title> 
    </head> 
    <body> 
     <div lang="ar"> 
      <div lang="he"> 
       <p>Hallo.</p> 
      </div> 
     </div> 
    </body> 
</html> 

tut $('p').attr('lang') kehrt nichts, wahrscheinlich, weil das <p> Element nicht über ein eigenes lang-Attribut

Dieser Code scheint das Richtige zu tun:

$('p').closest('[lang]').attr('lang') 

Ist das funktionell richtig? Und gibt es eine bessere Möglichkeit, dies in jQuery, in reinem JavaScript oder mit einer anderen JavaScript-Bibliothek zu tun?

Vielen Dank.

+2

Ich denke, Sie haben den besten Weg geschrieben. Natürlich, wenn Sie jQuery in anderem Code verwenden. – Novelist

+0

.prop() könnte anstelle von .attr() verwendet werden –

Antwort

1

Der einfachste Weg ist eine rekursive Funktion zu schreiben:

function getLanguage(node) { 
    if(node.lang) { 
    return node.lang; 
    } else if(node.parentNode) { 
    return getLanguage(node.parentNode); 
    } else { 
    return undefined; 
    } 
} 

Rekursion manchmal ineffizient könnte, aber hier wahrscheinlich spielt es keine Rolle. Wenn Sie die Informationen für verschiedene Elemente in einem Dokument sehr häufig benötigen, kann die Effizienz von Bedeutung sein. Sie können dann den gesamten Dokumentbaum durchqueren und eine neue Eigenschaft hinzufügen, die jedem Knoten die "berechnete Sprache" anzeigt.

0

Dieses jQuery-Plugin sollte die Aufgabe erledigen. Es berücksichtigt nur das erste Element im jQuery-Objekt.

(function($) { 
    $.fn.lang = function() { 
     if (this.length) { 
      var node = this[0]; 
      while (node) { 
       if (node.lang) { 
        return node.lang; 
       } 
       node = node.parentNode; 
      } 
     } 
    }; 
})(jQuery) 

Es wird undefined zurückgeben, wenn kein lang Attribut gefunden wird.

+0

Lol. Sie verwenden jQuery, aber vergessen Sie '' engste 'und jQ Selektoren wie im ursprünglichen Beitrag. Du bist witzig, Alter – Novelist

+0

@moremonds jQuery '[lang]' Attributselektoren funktionieren möglicherweise nicht, wenn die Spracheigenschaft als Eigenschaft anstelle eines Attributs hinzugefügt wurde. Es hängt davon ab, ob der Browser die Eigenschaft in das Attribut spiegelt. Chrome weiß ich nicht über andere Browser. In jedem Fall wäre dies effizienter als die Verwendung eines Attributselektors. – Alnitak

+0

Hm .. Das sieht aus wie beruhigend, richtig? – Novelist

Verwandte Themen