CSS Selectors ถูกจับคู่โดยเครื่องมือเบราว์เซอร์จากขวาไปซ้าย ดังนั้นพวกเขาจึงหาเด็ก ๆ ก่อนจากนั้นตรวจสอบผู้ปกครองเพื่อดูว่าตรงกับส่วนที่เหลือของกฎหรือไม่
- ทำไมนี้
- มันเป็นเพียงเพราะสเป็คบอกว่า?
- มันจะมีผลต่อเค้าโครงท้ายที่สุดหรือไม่หากประเมินจากซ้ายไปขวา
สำหรับฉันวิธีที่ง่ายที่สุดที่จะทำคือใช้ตัวเลือกที่มีจำนวนองค์ประกอบน้อยที่สุด ดังนั้น IDs เป็นอันดับแรก (เนื่องจากควรคืนค่า 1 องค์ประกอบเท่านั้น) จากนั้นอาจคลาสหรือองค์ประกอบที่มีจำนวนโหนดน้อยที่สุด - เช่นอาจมีเพียงหนึ่งช่วงบนหน้าดังนั้นไปที่โหนดนั้นโดยตรงด้วยกฎใด ๆ ที่อ้างอิงช่วง
นี่คือลิงค์บางส่วนที่สำรองข้อมูลการอ้างสิทธิ์ของฉัน
- http://code.google.com/speed/page-speed/docs/rendering.html
- https://developer.mozilla.org/en/Writing_Efficient_CSS
ดูเหมือนว่าจะทำเช่นนี้เพื่อหลีกเลี่ยงการดูเด็กทุกคนของพ่อแม่ (ซึ่งอาจเป็นจำนวนมาก) มากกว่าพ่อแม่ทุกคนของเด็กที่จะต้องเป็นหนึ่ง แม้ว่า DOM จะลึกมันก็จะดูที่หนึ่งโหนดต่อระดับแทนที่จะเป็นหลาย ๆ ในการจับคู่ RTL ง่ายกว่าหรือเร็วกว่าในการประเมิน CSS selectors LTR หรือ RTL
#foo
ตัวเลือกจะต้องตรงกับโหนดเหล่านั้นทั้งหมด jQuery มีตัวเลือกในการบอกว่า $ ("# foo") จะส่งคืนองค์ประกอบเดียวเสมอเพราะพวกเขากำลังกำหนด API ของตัวเองด้วยกฎของตัวเอง แต่เบราว์เซอร์จำเป็นต้องใช้ CSS และ CSS บอกว่าจะจับคู่ทุกอย่างในเอกสารด้วย ID ที่กำหนด
querySelectorAll
) ในกรณีอื่น ๆ จะใช้ Sizzle Sizzle ไม่ตรงกับหลาย ID แต่ QSA ทำ (AYK) เส้นทางที่ถ่ายนั้นขึ้นอยู่กับตัวเลือกบริบทและเบราว์เซอร์และเวอร์ชันของมัน Query API ของ jQuery ใช้สิ่งที่ฉันเรียกว่า "Native First, Dual Approach" ฉันเขียนบทความเกี่ยวกับเรื่องนั้น แต่มันลง แม้ว่าคุณอาจพบที่นี่: fortybelow.ca/hosted/dhtmlkitchen/JavaScript-Query-Engines.html