Matti Mäkitalo: Javascript - document.getElementById statt Id Classname?

Beitrag lesen

Hi,

Letzte Frage (und ich gebe zu, dass ich dies durch selbstausprobieren auch evaluieren könnte): ist ein getElementsByClassName langsamer als ein entsprechender Selektor in CSS? Es passiert doch beim Traversieren des DOM-Baumes in beiden Fällen nichts wesentlich anderes.

Der Browser dürfte beim Verarbeiten des Stylesheets schon traversiert haben. Wenn sich dann die Klasse eines Elements von "foo" auf "bar" ändert, kann er blitzschnell die Darstellung ändern: Die Regeln für '.foo .quz' greifen nicht mehr, dafür jene für '.bar .quz'.

Szenario:

Gegeben sei folgendes Fragment:

<section>  
<h1>Bla</h1>  
<p>Irgendeintext</p>  
</section>  
<section>  
<h1>Blub</h1>  
<p>Nocheintext</p>  
</section>  

und folgende Regel:

.sec p {  
   color: red;  
}

Wenn ich nun einem der section-Nodes der Klasse "sec" zuweise, dann muss der Browser diese Regel neu auswerten. In diesem Fall ist das einfach: alle Absätze unterhalb. Dort könnte aber auch noch ein Klassenselektor stehen. Ich kann mir schwerlich vorstellen, dass der Browser anhand einer zu Beginn "inaktiven" (weil nicht benutzten) Regel schonmal alle Knoten vormerkt, die potenziell durch Klassenänderungen verändert werden könnten. Meine Schlußfolgerung wäre: dann muss der Browser neu suchen. Und dieser Aufwand dürfte im Prinzip document.getElementsByClassName() sein.

Bis die Tage,
Matti