Selektor CSS dicocokkan oleh mesin peramban dari kanan ke kiri. Jadi mereka pertama-tama menemukan anak-anak dan kemudian memeriksa orang tua mereka untuk melihat apakah mereka cocok dengan bagian peraturan lainnya.
- Kenapa ini?
- Apakah hanya karena spek itu mengatakan?
- Apakah itu memengaruhi tata letak akhirnya jika dievaluasi dari kiri ke kanan?
Bagi saya cara paling sederhana untuk melakukannya adalah menggunakan penyeleksi dengan jumlah elemen paling sedikit. Jadi ID pertama (karena mereka hanya mengembalikan 1 elemen). Kemudian mungkin kelas atau elemen yang memiliki jumlah node paling sedikit - mis. Mungkin hanya ada satu rentang pada halaman jadi langsung ke node itu dengan aturan apa pun yang merujuk pada rentang.
Berikut adalah beberapa tautan yang mendukung klaim saya
- http://code.google.com/speed/page-speed/docs/rendering.html
- https://developer.mozilla.org/en/Writing_Efficient_CSS
Kedengarannya seperti itu dilakukan dengan cara ini untuk menghindari harus melihat semua anak-anak dari orang tua (yang bisa banyak) daripada semua orang tua dari anak yang harus menjadi satu. Bahkan jika DOM dalam, itu hanya akan melihat satu node per level daripada multiple dalam pencocokan RTL. Apakah lebih mudah / lebih cepat untuk mengevaluasi pemilih CSS LTR atau RTL?
#foo
pemilih harus mencocokkan semua node tersebut. jQuery memiliki opsi untuk mengatakan bahwa $ ("# foo") akan selalu mengembalikan hanya satu elemen, karena mereka mendefinisikan API mereka sendiri dengan aturannya sendiri. Tetapi browser perlu mengimplementasikan CSS, dan CSS mengatakan untuk mencocokkan semua yang ada dalam dokumen dengan ID yang diberikan.
querySelectorAll
). Dalam kasus lain, Sizzle digunakan. Sizzle tidak cocok dengan beberapa ID tetapi QSA melakukannya (AYK). Jalur yang diambil tergantung pada pemilih, konteks, dan browser serta versinya. API Query jQuery menggunakan apa yang saya sebut "Native First, Dual Approach". Saya menulis artikel tentang itu, tetapi itu turun. Meskipun Anda dapat menemukan di sini: fortybelow.ca/hosted/dhtmlkitchen/JavaScript-Query-Engines.html