العمل مع 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() يسترجع العناصر حسب المعرف. 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() الخاصة به هي المصنع للعناصر، مع مصانع شقيقة للنصوص، والتعليقات، والقطع.
كيف أنقل شجرة فرعية بين مستندين؟
استخدم 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 | تجول بترتيب المستند المصفى |