ทำงานกับ DOM
ทำงานกับ DOM
ชั้น DOM จำลองหน้า HTML เป็นต้นไม้ของโหนดที่มีประเภทต่าง ๆ Document เป็นจุดเริ่มต้นและโรงงานสร้างโหนด; Element และ Node ทำหน้าที่ในการจัดการและการเดินทางผ่าน API.
การสร้างโหนด
Document.create_element(), create_text_node(), create_comment() และ create_document_fragment() สร้างโหนด; append_child() เชื่อมต่อพวกมัน:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
doc.append_child(el)Attributes
Element.set_attribute(), get_attribute(), has_attribute() และ remove_attribute() จัดการแอตทริบิวต์ของมาร์กอัป; Attr และ NamedNodeMap เปิดเผยพวกมันเป็นวัตถุ:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)การดำเนินการกับต้นไม้
Node จัดหาเครื่องมือโครงสร้าง: insert_before(), remove_child(), replace_child(), clone_node() และ contains(), พร้อมกับ child_nodes, parent_node และ first_child ตัวเข้าถึงและ text_content สำหรับข้อความของโครงย่อย. get_root_node() และ has_child_nodes() ตอบคำถามเชิงโครงสร้างโดยตรง.
การค้นหาและการเดินผ่าน
Document.get_element_by_id() ดึงเอาอิลีเมนต์ตาม id. NodeList และ HTMLCollection เก็บชุดผลลัพธ์; NodeIterator และ TreeWalker (พร้อมกับ NodeFilter) เดินสำรวจโครงย่อยตามลำดับเอกสาร.
การสังเกตการเปลี่ยนแปลง
MutationObserver บันทึกการเปลี่ยนแปลงของต้นไม้เป็นรายการ MutationRecord, สะท้อนรูปแบบผู้สังเกตมาตรฐานสำหรับการตอบสนองต่อการแก้ไขเชิงโครงสร้าง.
เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- สร้างโหนดทุกอันผ่าน
Documentที่เป็นเจ้าของ — โหนดมีขอบเขตระดับเอกสาร; ใช้Document.import_node()หรือadopt_node()เพื่อย้ายโหนดระหว่างเอกสาร - ควรใช้
text_contentสำหรับข้อความของโครงย่อยทั้งหมดแทนการจัดการโหนดTextด้วยตนเอง - ใช้
DocumentFragmentเพื่อประกอบกลุ่มของโหนดก่อนappend_child()เดียว - ตรวจสอบ
has_attribute()ก่อนget_attribute()เมื่อแอตทริบิวต์ที่หายไปมีความสำคัญ
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | แก้ไข |
|---|---|---|
| โหนดปรากฏในเอกสารที่ไม่ถูกต้อง | โหนดที่สร้างโดย Document ที่ต่างกัน | ย้ายมันด้วย import_node() หรือ adopt_node() ก่อน |
| การค้นหาแอตทริบิวต์ไม่พบค่าใด | แอตทริบิวต์ไม่เคยถูกตั้งค่าในองค์ประกอบ | ป้องกันด้วย has_attribute() |
| ข้อความของต้นไม้ย่อยว่างเปล่า | กำลังอ่าน text_content ก่อนที่เด็กจะถูกแนบ | แนบเด็กก่อน แล้วอ่าน |
FAQ
คลาสใดสร้างองค์ประกอบใหม่?
Document — วิธี create_element() ของมันเป็นโรงงานสำหรับองค์ประกอบ, โดยมีโรงงานพี่น้องสำหรับข้อความ, ความคิดเห็น, และส่วนย่อย.
ฉันจะย้าย subtree ระหว่างสองเอกสารได้อย่างไร?
ใช้ Document.import_node() เพื่อคัดลอกหรือ adopt_node() เพื่อถ่ายโอน, แล้วแนบด้วย append_child().
มีตัวสังเกต API สำหรับการเปลี่ยนแปลงของต้นไม้หรือไม่?
ใช่ — MutationObserver ส่งมอบชุดข้อมูล MutationRecord ที่อธิบายการเปลี่ยนแปลงโครงสร้างและแอตทริบิวต์.
สรุป API Reference
| คลาส/เมธอด | คำอธิบาย |
|---|---|
Document.create_element | สร้างโหนดองค์ประกอบ |
Document.get_element_by_id | ค้นหาองค์ประกอบตาม id |
Element.set_attribute | ตั้งแอตทริบิวต์มาร์กอัป |
Node.insert_before | แทรกโหนดก่อนโหนดลูกอ้างอิง |
Node.clone_node | คัดลอกโหนดหรือส่วนย่อยของต้นไม้ |
MutationObserver | สังเกตการเปลี่ยนแปลงของต้นไม้ |
TreeWalker | การท่องตามลำดับเอกสารที่กรอง |