בניית עץ
בניית עץ
בניית העץ היא שלב הפירסור השני: הוא צורך את זרם הטוקנייזר ובונה את ה-DOM לפי אלגוריתם הסטנדרטים — כולל התנהגויות השחזור משגיאות המפורסמות שלו. parse_html() עוטף את כל צינור העבודה בקריאה אחת; TreeBuilder חושף את המנגנון.
פירסור בקריאה אחת
parse_html() עוברת מטקסט סימון לעץ גמור; parse_fragment() מיישמת את אלגוריתם הפрагמנט על אלמנט הקשר. שניים אלו מניעים את אותם הפנימיים של TreeBuilder דרך TreeBuilder.run().
מצבי הוספה ואלמנטים פתוחים
InsertionMode ממדד את מכונת המצבים של האלגוריתם, עם StackOfOpenElements ו-TemplateInsertionModeStack שעוקבים אחרי מצב הבנייה בדיוק כפי שהמפרט מתאר.
שחזור משגיאות
אלמנטים של עיצוב שבוצעו בצורה לא נכונה נפתרים דרך run_adoption_agency_algorithm() — אלגוריתם סוכנות האימוץ של התקן — ו-ActiveFormattingList עוקב אחרי אלמנטים של עיצוב פעילים. get_foster_parent_location() מיישם טיפוח חונכות לתוכן טבלה שהוצב במקום הלא נכון.
מצבי קוורק ותוכן זר
determine_quirks_mode() מסווג מסמכים לפי ה-doctype שלהם. תוכן SVG ו-MathML זורם דרך adjust_svg_attributes(), adjust_mathml_attributes() ו-adjust_foreign_attributes(), עם נקודות אינטגרציה שמזוהות על-ידי is_html_integration_point() ו-is_mathml_text_integration_point().
טיפים ושיטות מומלצות
- פנה ל-
parse_html()אלא אם אתה צריך במפורש חקירת מצב הבנייה - השתמש ב-
parse_fragment()עם אלמנט ההקשר הנכון — חוקי פענוח קטעים תלוים בו - כאשר מתבצע ניפוי באגים של עצים מפתיעים שנוצרים ממסמכים עם סימון גרוע, התנהגויות סוכנות האימוץ והטיפוח החונכני הן בדרך כלל ההסבר, ולא באג
בעיות נפוצות
| בעיה | סיבה | תיקון |
|---|---|---|
| תוכן הטבלה הועבר מחוץ לטבלה | הקצאת הורה לתוכן ממוקם במקום הלא נכון | תיקון קינון סימון המקור |
| תגיות עיצוב משוכפלות בפלט | שיקום סוכנות האימוץ | התנהגות צפויה לפי תקנים עבור קידוד מוטעה |
| המסמך מוצג במצב קווירקס | חסר או doctype מיושן | בדוק determine_quirks_mode() בקלט |
FAQ
מדוע סימון פגום מייצר עץ תקף?
אלגוריתם הסטנדרטים מגדיר התאוששות עבור כל מקרה של שגיאה — TreeBuilder מיישם את המסלולים הללו במקום לזרוק.
מהו אלגוריתם של סוכנות האימוץ?
פרוצדורת הסטנדרט לתיקון אלמנטים פורמטיים משולבים באופן שגוי; נחשפת כ-run_adoption_agency_algorithm().
האם הבונה תומך ב-SVG וב-MathML?
כן — מאפייני תוכן זר מתאימים דרך הפונקציות הייעודיות adjust_*_attributes() עם זיהוי נקודת אינטגרציה של הסטנדרטים.
API Reference סיכום
| מחלקה/שיטה | תיאור |
|---|---|
parse_html | המרת סימון לעץ בקריאה אחת |
parse_fragment | ניתוח אלגוריתם קטע |
TreeBuilder.run | בניית עץ ריצה |
InsertionMode | מכונת מצבי אלגוריתם |
run_adoption_agency_algorithm | תיקון קידוד שגוי |
determine_quirks_mode | סיווג מצבי quirks מבוסס על Doctype |