ทำงานกับ 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การท่องตามลำดับเอกสารที่กรอง

ดูเพิ่มเติม

 ภาษาไทย