בניית עץ

בניית עץ

בניית העץ היא שלב הפירסור השני: הוא צורך את זרם הטוקנייזר ובונה את ה-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

ראה גם

 עברית