document.querySelectorAll()
ได้หลายไม่สอดคล้องกันในเบราว์เซอร์และไม่ได้รับการสนับสนุนในเบราว์เซอร์ที่เก่ากว่านี้อาจจะไม่ก่อให้เกิดปัญหาใด ๆ อีกต่อไปในปัจจุบัน มันมีกลไกการกำหนดขอบเขตที่ไม่ได้ใช้งานง่ายและคุณสมบัติอื่น ๆ ที่ไม่ค่อยดีนัก นอกจากนี้สำหรับจาวาสคริปต์คุณจะทำงานกับชุดผลลัพธ์ของข้อความค้นหาเหล่านี้ได้ยากขึ้นซึ่งในหลายกรณีคุณอาจต้องการทำเช่นนั้น jQuery ให้ฟังก์ชั่นการทำงานกับพวกเขาที่ชอบ: filter()
, find()
, children()
, parent()
, map()
, not()
และอีกหลาย ไม่ต้องพูดถึงความสามารถของ jQuery ในการทำงานกับตัวเลือก pseudo-class
อย่างไรก็ตามฉันจะไม่พิจารณาสิ่งเหล่านี้เป็นคุณสมบัติที่แข็งแกร่งที่สุดของ jQuery แต่สิ่งอื่น ๆ เช่น "การทำงาน" ใน dom (เหตุการณ์, การจัดแต่งทรงผม, ภาพเคลื่อนไหวและการจัดการ) ในวิธีที่เข้ากันได้กับ crossbrowserหรืออินเตอร์เฟส ajax
หากคุณต้องการให้เครื่องมือเลือกจาก jQuery คุณสามารถใช้หนึ่ง jQuery เองใช้: Sizzleวิธีที่คุณมีพลังของเครื่องยนต์ jQuerys Selector โดยไม่มีค่าใช้จ่ายที่น่ารังเกียจ
แก้ไข: สำหรับบันทึกฉันเป็นแฟน JavaScript ขนาดใหญ่ อย่างไรก็ตามในบางครั้งคุณจำเป็นต้องมี JavaScript 10 บรรทัดซึ่งคุณจะเขียน 1 บรรทัด jQuery
แน่นอนคุณต้องมีวินัยในการไม่เขียน jQuery เช่นนี้:
$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();
อ่านยากมากในขณะที่ตัวหลังค่อนข้างชัดเจน:
$('ul.first')
.find('.foo')
.css('background-color', 'red')
.end()
.find('.bar')
.css('background-color', 'green')
.end();
JavaScript ที่เทียบเท่าจะมีความซับซ้อนมากยิ่งขึ้นโดยรหัสเทียมข้างบน:
1) ค้นหาองค์ประกอบพิจารณาองค์ประกอบทั้งหมดหรือเฉพาะรายการแรก
// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");
2) ทำซ้ำอาร์เรย์ของโหนดชายด์ผ่านลูปบางอัน (อาจซ้อนหรือเรียกซ้ำ) และตรวจสอบคลาส (รายการคลาสไม่พร้อมใช้งานในเบราว์เซอร์ทั้งหมด!)
//.find('.foo')
for (var i = 0;i<e.length;i++){
// older browser don't have element.classList -> even more complex
e[i].children.classList.contains('foo');
// do some more magic stuff here
}
3) ใช้สไตล์ css
// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"
รหัสนี้จะมีอย่างน้อยสองเท่าของบรรทัดที่คุณเขียนด้วย jQuery นอกจากนี้คุณจะต้องพิจารณาปัญหาข้ามเบราว์เซอร์ซึ่งจะลดความได้เปรียบของความเร็วที่รุนแรง (นอกเหนือจากความน่าเชื่อถือ) ของรหัสเนทีฟ
querySelector
วิธีการ (3) การโทร AJAX ทำได้ง่ายและรวดเร็วยิ่งขึ้นด้วย jQuery (4) การสนับสนุนใน IE6 + ฉันแน่ใจว่ามีอีกหลายจุดที่สามารถทำได้เช่นกัน