Les sélecteurs CSS correspondent aux moteurs de navigation de droite à gauche. Ils trouvent donc d'abord les enfants, puis vérifient leurs parents pour voir s'ils correspondent aux autres parties de la règle.
- Pourquoi est-ce?
- Est-ce juste parce que la spécification le dit?
- Cela affecte-t-il la mise en page éventuelle si elle a été évaluée de gauche à droite?
Pour moi, la façon la plus simple de le faire serait d'utiliser les sélecteurs avec le moins d'éléments. Donc les identifiants en premier (car ils ne doivent renvoyer qu'un seul élément). Alors peut-être des classes ou un élément qui a le moins de nœuds - par exemple, il ne peut y avoir qu'une seule étendue sur la page, alors allez directement à ce nœud avec n'importe quelle règle qui fait référence à une étendue.
Voici quelques liens sauvegardant mes réclamations
- http://code.google.com/speed/page-speed/docs/rendering.html
- https://developer.mozilla.org/en/Writing_Efficient_CSS
On dirait que c'est fait de cette façon pour éviter d'avoir à regarder tous les enfants du parent (qui pourraient être nombreux) plutôt que tous les parents d'un enfant qui doit être un. Même si le DOM est profond, il ne regarderait qu'un nœud par niveau plutôt que plusieurs dans la correspondance RTL. Est-il plus facile / plus rapide d'évaluer les sélecteurs CSS LTR ou RTL?
#foo
sélecteur devrait correspondre à tous ces nœuds. jQuery a la possibilité de dire que $ ("# foo") retournera toujours un seul élément, car ils définissent leur propre API avec ses propres règles. Mais les navigateurs doivent implémenter CSS, et CSS dit de faire correspondre tout ce qui se trouve dans le document avec l'ID donné.
querySelectorAll
). Dans d'autres cas, Sizzle est utilisé. Sizzle ne correspond pas à plusieurs ID, mais QSA le fait (AYK). Le chemin emprunté dépend du sélecteur, du contexte, du navigateur et de sa version. L'API Query de jQuery utilise ce que j'ai appelé "Native First, Dual Approach". J'ai écrit un article là-dessus, mais c'est en baisse. Bien que vous puissiez trouver ici: quarantebelow.ca/hosted/dhtmlkitchen/JavaScript-Query-Engines.html