Rumah  >  Artikel  >  hujung hadapan web  >  Tafsiran kod sumber pemilih jQuery (6): Sizzle selector padanan logik analysis_jquery

Tafsiran kod sumber pemilih jQuery (6): Sizzle selector padanan logik analysis_jquery

WBOY
WBOYasal
2016-05-16 16:06:441086semak imbas

Baru-baru ini saya membaca beberapa artikel analisis tentang Sizzle di Internet Bagi susunan padanan, sering dikatakan kaedah padanan terbalik dari kanan ke kiri digunakan, tetapi butiran khusus tidak diperkenalkan secara terperinci, atau sama seperti. artikel saya sebelum ini, Kod ini diperkenalkan secara terperinci baris demi baris, tetapi konsep keseluruhannya masih kurang. Berikut adalah penjelasan keseluruhan logik yang sepadan (hasil prapenyusun) versi JQuery-1.10.2 yang saya tidak akan pergi ke banyak butiran di sini.

Proses pemadanan Sizzle menggunakan versi yang dipertingkatkan berdasarkan kaedah pemadanan terbalik dari kanan ke kiri Lagipun, carian HTML berbeza daripada pemadanan teks Oleh itu, carian HTML diperlukan. Biar saya jelaskan dahulu bahawa pemilih perhubungan yang disebut di bawah merujuk kepada pemilih Combinator dalam W3C Kerana saya merasakan bahawa pemilih perhubungan nama lebih dekat dengan maksud sebenar daripada yang lain, jadi saya menamakannya dengan cara ini.

1. Perkenalkan secara ringkas dua fungsi utama yang disusun dan dilaksanakan oleh Sizzle:

a) matcherFromTokens - Hasilkan fungsi pelaksanaan untuk pemilih blok Apa yang dipanggil pemilih blok ialah rentetan pemilih yang tidak mengandungi pemisahan koma.

b) matcherFromGroupMatchers - fungsi pelaksanaan akhir yang menjana pemilih blok yang berbeza Fungsi ini juga bertanggungjawab untuk menapis objek pendua daripada hasil akhir.

2. Fungsi matcherFromTokens menjana fungsi pelaksanaan yang berbeza untuk pelbagai jenis pemilih. Jika ia mengandungi pseudo-class, setMatcher dikembalikan, sebaliknya elementMatcher dikembalikan. Kod tersebut membezakan setMatcher dan elementMatcher dengan mengenal pasti sama ada padanan mengandungi atribut expando:

a) Untuk pemilih bukan kelas pseudo dan bukan hubungan, fungsi pelaksanaan dijana terus dari kiri ke kanan dan setiap fungsi wujud sebagai elemen berbeza daripada tatasusunan pemadanan yang sama.

b) Untuk pemilih perhubungan, pemadanan yang dijana sebelum ini akan ditolak ke dalam tatasusunan pemadanan baharu.

c) Untuk pemilih kelas pseudo, fungsi pelaksanaan akan dijana melalui fungsi setMatcher Apabila memanggil setMatcher, enam parameter akan dihantar, iaitu preFilter, selector, matcher, postFilter, postFinder dan postSelector.

PreFilter ialah fungsi akhir yang diproses oleh fungsi elementMatcher pada tatasusunan matchers yang dijana sebelum melaksanakan fungsi setMatcher(matchers) akan mengembalikan fungsi baharu yang melaksanakan setiap fungsi elemen matchers dari belakang ke hadapan;.

pemilih ialah rentetan pemilih yang sepadan dengan pemadan;

padanan ialah fungsi padanan kelas pseudo itu sendiri;

PostFilter ialah fungsi pemadanan yang sepadan dengan rentetan pemilih antara kelas pseudo dan simbol perhubungan atau kelas pseudo pertama Ia adalah hasil pengembalian fungsi matcherFromTokens bersarang;

PostFinder ialah fungsi pemadanan yang dijana oleh semua pemilih selepas pemilih yang sepadan dengan postFilter Ia juga merupakan hasil pengembalian fungsi pemadananDariTokens bersarang;

PostSelector ialah rentetan pemilih yang sepadan dengan postFinder.

d) Jika tiada kelas pseudo dalam rentetan pemilih, maka fungsi pemadanan akhir yang dijana oleh elementMatcher(padan) akan dikembalikan.

Seperti yang dapat dilihat daripada pengenalan di atas, terdapat hubungan bersarang antara fungsi pelaksanaan yang dijana secara ringkas, setMatcher mengandungi pemadanan dan fungsi pemadanan pemilih hubungan mengandungi fungsi pemadanan bukan kelas pseudo dan bukan perhubungan.

3. Pengenalan kepada proses pelaksanaan:

a) Fungsi pelaksanaan pemilih blok pelaksanaan: Untuk elementMatcher, ia dilaksanakan mengikut urutan dari luar ke dalam dan dari belakang ke hadapan, iaitu, dari tatasusunan paling luar ke tatasusunan paling dalam Dalam tatasusunan yang sama, ia dilaksanakan mengikut urutan dari elemen terakhir hingga yang pertama unsur.

Untuk setMatcher, mula-mula dapatkan hasil pemadanan berdasarkan praPenapis dan pemilih; kemudian jalankan fungsi pemadanan untuk mendapatkan hasil pemadanan, kemudian, laksanakan fungsi pasca Penapis, dan akhirnya, dapatkan hasil pemadanan berdasarkan postFinder dan postSelector.

c) Selepas melaksanakan fungsi pelaksanaan setiap pemilih blok mengikut turutan, tapis data pendua dan kembalikan hasilnya.

Selepas membaca proses umum di atas, ia sepatutnya lebih mudah difahami apabila melihat pengenalan terperinci setiap kaedah Sudah tentu, beberapa butiran tidak dibincangkan di sini, seperti penjanaan set hasil awal (benih) dan pelaksanaan fungsi yang terhasil. butiran logik.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn