วิธีใช้ HTML & ด้วย Shadow DOM
ช่อง HTML เป็นหนึ่งในมาตรฐานที่โดดเด่นที่สุดที่ทำโดย W3C รวมกับมาตรฐาน W3C อันน่าประทับใจอีกตัวหนึ่งที่เรียกว่า แม่แบบ, และคุณมีการผสมผสานที่ยอดเยี่ยมในการทำงานกับ ความสามารถในการ สร้างและเพิ่มองค์ประกอบ HTML ไปที่หน้า ใช้ JavaScript เป็นงานที่จำเป็นและสำคัญ.
มันจะมีประโยชน์เมื่อมีข้อมูลโค้ดถึง ปรากฏเฉพาะในบางช่วงเวลา, หรือเมื่อคุณไม่ต้องการพิมพ์องค์ประกอบ HTML ที่มีโครงสร้างคล้ายกันหลายร้อยรายการ แต่ต้องการ ทำให้กระบวนการเป็นอัตโนมัติ.
การสร้างองค์ประกอบ HTML ใน JavaScript คือ ไม่ถูกใจ. มันเป็นเรื่องยุ่งยากที่จะต้องตรวจสอบและตรวจสอบอีกครั้งหากคุณครอบคลุมแท็กทั้งหมดวางไว้ในลำดับที่ถูกต้องทั้งหมดมีทั้งหมดเพียง เกินไป มากในการพิมพ์และติดตาม ความวุ่นวายนี้อย่างไร, ได้ทางออก เมื่อ แท็กปรากฏ หากสิ่งที่ต้องการจะเป็น เพิ่มในหน้าแบบไดนามิก, คุณสามารถวางไว้ด้านในของ
ธาตุ.
ในโพสต์นี้ฉันจะแสดงให้คุณเห็นว่าคุณสามารถใช้
และ แท็กพร้อมกับ JavaScript ถึง สร้างโรงงานตารางมินิ HTML ที่สามารถสร้างและเติมตารางที่คล้ายกันหลายร้อยตาราง.
และ
แท็ก
แท็กถือรหัส HTML ที่ เบราว์เซอร์จะไม่แสดงผล จนกว่าจะถูกเพิ่มลงในเอกสารอย่างถูกต้องโดยใช้ JavaScript
แท็กคือ ตัวยึดที่คุณเพิ่มลงใน Shadow DOM ซึ่งสามารถทำจากเนื้อหาของ ธาตุ.
เงา DOM คล้ายกับ DOM ปกติ (โมเดลเอกสารแยกวิเคราะห์จาก HTML) มัน สร้างต้นไม้ที่มีขอบเขต (ต้นไม้เงา DOM) ที่มี รากของมันเอง และยังสามารถมี สไตล์ของตัวเอง.
เมื่อคุณแทรกต้นไม้เงา DOM เข้าไปในองค์ประกอบในเอกสารหลัก - องค์ประกอบนั้นจะถูกเรียกว่า โฮสต์เงา -, องค์ประกอบลูกทั้งหมดของโฮสต์เงาที่มีเครื่องหมาย สล็อต
คุณลักษณะ (ไม่เหมือนกับที่กล่าวมาข้างต้น
แท็ก) จะ แทนที่ด้วยทรีย่อยที่เพิ่งแทรกใหม่.
Shadow DOM ที่เขียนบทความนี้ (กรกฎาคม 2017) คือ รองรับเฉพาะในเบราว์เซอร์ที่ใช้ WebKit และ Blink แต่คุณสามารถตรวจสอบสถานะที่แท้จริงของการสนับสนุนเบราว์เซอร์บน CanIUse ได้ตลอดเวลา.
การตั้งค่า HTML
ยังคงสับสนอยู่ใช่ไหม มาดูโค้ดกันหน่อยเริ่มจาก ธาตุ.
ภายใน ภายในเทมเพลต, ฉันยังเพิ่ม สไตล์พื้นฐานบางอย่าง สำหรับตารางโดยใช้ นอกเทมเพลต, มีสอง แต่ละ ตอนนี้สิ่งที่คุณเห็นในหน้านี้คือสตริงข้อความที่อยู่ในช่วงดังนั้นเราจึงจำเป็นต้องเพิ่ม JavaScript เช่นกัน. เมื่อใช้ Javascript เราจะแทรกตารางจากด้านในเทมเพลตลงในทั้งสอง div เป็นต้นไม้ Shadow DOM. หลังจากการแทรกช่วงจะได้รับการวางลงในช่องของตนภายในตารางและแสดงชื่อคอลัมน์หรือค่าเซลล์ที่ต้องการ ผลจะเป็นอย่างไร ตารางที่สร้างขึ้นอัตโนมัติสองตาราง ที่ใช้เทมเพลตเดียวกัน. ก่อนอื่นเราต้องตรวจสอบว่า Shadow DOM รองรับในเบราว์เซอร์ของผู้ใช้หรือไม่ เราสร้างตัวแปรที่กำหนดเองที่เรียกว่า ข้างใน มี สอง จากนั้นเรา เพิ่มสำเนาของเนื้อหาเทมเพลต ไปที่ต้นไม้ Shadow DOM โดยใช้ และตาราง HTML แบบไดนามิกของเราพร้อมแล้วนี่คือลักษณะที่ปรากฏใน Chrome:, มี
ดี ใช้เป็นพิมพ์เขียว สำหรับ สร้างบางตาราง ที่จะถูกเพิ่มลงในเอกสาร มี
องค์ประกอบภายในเซลล์ตาราง ( และ ) ทำหน้าที่เป็นตัวแทน สำหรับชื่อคอลัมน์และค่าของเซลล์ แต่ละช่องมีเอกลักษณ์ ชื่อ
คุณลักษณะที่ ระบุมัน.
แท็ก.
, สำหรับสองตารางที่แยกจากกันเราต้องการเพิ่มไปยังหน้า.
องค์ประกอบมี
สล็อต
คุณลักษณะของค่าใด เท่ากับ ชื่อ
ราคา ของพวกเขาที่สอดคล้องกัน
ติดแท็กภายใน .
การแนบแผนผัง Shadow DOM
attachShadow ()
วิธี แนบต้นไม้ Shadow DOM เข้ากับองค์ประกอบ และส่งคืนรูทโหนดของต้นไม้ Shadow DOM นั้น ถ้า
ในรหัสด้านล่างตรวจสอบว่าเบราว์เซอร์รองรับวิธีนี้โดยการทดสอบว่า divs ในหน้านั้นมี attachShadow
วิธี. // ตรวจสอบว่า Shadow DOM รองรับหาก ('attachShadow' ใน document.createElement ('div')) else console.warn ('attachShadow ไม่รองรับ');
templateContent
ที่ ทำหน้าที่เป็นข้อมูลอ้างอิง ไปยังเนื้อหาของเทมเพลต. if ('attachShadow' ใน document.createElement ('div')) let templateContent = document.querySelector ('template') เนื้อหา ให้ divs = document.querySelectorAll ('div'); divs.forEach (ฟังก์ชั่น (div) // inside loop); else console.warn ('ไม่สนับสนุน attachShadow');
แต่ละ
วนรอบ, ต้นไม้เงาของ DOM คือ แนบมากับแต่ละ div (div.attachShadow (โหมด: 'open')
).โหมด
ตัวเลือก สำหรับ attachShadow
: เปิด
และ ปิด
. ถ้า ปิด
ถูกเลือกโหนดรูทของแผนผัง Shadow DOM จะไม่สามารถเข้าถึงได้ ไปยังองค์ประกอบและวัตถุ DOM ภายนอก.templateContent.cloneNode (จริง)
วิธี. if ('attachShadow' ใน document.createElement ('div')) let templateContent = document.querySelector ('template') เนื้อหา ให้ divs = document.querySelectorAll ('div'); divs.forEach (ฟังก์ชั่น (div) div.attachShadow (โหมด: 'open') appendChild (templateContent.cloneNode (true))); else console.warn ('ไม่สนับสนุน attachShadow');