Làm việc với DOM

Làm việc với DOM

Lớp DOM mô hình hoá một trang HTML như một cây các nút có kiểu. Document là điểm vào và nhà máy tạo nút; Element và Node thực hiện việc thao tác và duyệt API.


Tạo Nút

Document.create_element(), create_text_node(), create_comment(), và create_document_fragment() tạo ra các nút; append_child() gắn chúng:

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(), và remove_attribute() quản lý các thuộc tính đánh dấu; Attr và NamedNodeMap phơi bày chúng dưới dạng đối tượng:

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)

Các thao tác trên cây

Node cung cấp bộ công cụ cấu trúc: insert_before(), remove_child(), replace_child(), clone_node(), và contains(), cộng với các child_nodes, parent_node, và first_child accessor và text_content cho văn bản subtree. get_root_node() và has_child_nodes() trả lời các câu hỏi cấu trúc một cách trực tiếp.

Tra cứu và Duyệt

Document.get_element_by_id() lấy các phần tử theo id. NodeList và HTMLCollection giữ các tập hợp kết quả; NodeIterator và TreeWalker (với NodeFilter) duyệt các subtree theo thứ tự tài liệu.

Quan sát các biến đổi

MutationObserver ghi lại các thay đổi cây dưới dạng các mục MutationRecord, phản chiếu mẫu quan sát chuẩn để phản hồi các chỉnh sửa cấu trúc.


Mẹo và Thực hành tốt nhất

  • Tạo mọi nút thông qua Document sở hữu — các nút có phạm vi tài liệu; sử dụng Document.import_node() hoặc adopt_node() để di chuyển chúng giữa các tài liệu
  • Ưu tiên text_content cho văn bản toàn bộ subtree hơn việc tự động Text các nút
  • Sử dụng DocumentFragment để tập hợp các lô nút trước một append_child() duy nhất
  • Kiểm tra has_attribute() trước get_attribute() khi thuộc tính thiếu có ý nghĩa

Các vấn đề thường gặp

Vấn đềNguyên nhânKhắc phục
Nút xuất hiện trong tài liệu saiNút được tạo bởi một Document khácDi chuyển nó bằng import_node() hoặc adopt_node() trước
Tra cứu thuộc tính không trả về gìThuộc tính chưa bao giờ được đặt trên phần tửBảo vệ bằng has_attribute()
Văn bản cây con trốngĐọc text_content trước khi các nút con được gắnGắn các nút con, sau đó đọc

FAQ

Lớp nào tạo các phần tử mới?

Document — phương thức create_element() của nó là nhà máy cho các phần tử, cùng với các nhà máy phụ cho văn bản, chú thích và đoạn.

Làm thế nào để di chuyển một cây con giữa hai tài liệu?

Sử dụng Document.import_node() để sao chép hoặc adopt_node() để chuyển, sau đó gắn kết bằng append_child().

Có trình quan sát API cho các thay đổi cây không?

Yes — MutationObserver cung cấp các lô MutationRecord mô tả các thay đổi về cấu trúc và thuộc tính.


Tóm tắt API Reference

Lớp/Phương thứcMô tả
Document.create_elementTạo một nút phần tử
Document.get_element_by_idTìm kiếm một phần tử theo id
Element.set_attributeĐặt một thuộc tính markup
Node.insert_beforeChèn một nút trước một nút con tham chiếu
Node.clone_nodeSao chép một nút hoặc một cây con
MutationObserverQuan sát các biến đổi của cây
TreeWalkerDuyệt theo thứ tự tài liệu đã lọc

Xem thêm

 Tiếng Việt