کار با 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، برای متن کل زیردرخت ازtext_contentاستفاده کنید - از
DocumentFragmentبرای ترکیب دستههای گرهها پیش از یکappend_child()استفاده کنید - هنگامیکه عدم وجود یک ویژگی معنیدار است، قبل از
get_attribute()،has_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 | عنصری را با شناسه جستجو کنید |
Element.set_attribute | یک ویژگی نشانهگذاری تنظیم کنید |
Node.insert_before | یک گره را پیش از یک فرزند مرجع درج کنید |
Node.clone_node | یک گره یا زیردرخت را کپی کنید |
MutationObserver | تغییرات درخت را مشاهده کنید |
TreeWalker | پیمایش فیلترشده به ترتیب سند |