2007-11-21

HTMLayout. Неявная модификация DOM-tree

Существует несколько ситуаций, когда генерируемое HTMLayout DOM-дерево не соответствует передаваемый пользователем html. Знания об этих исключениях необходимы для правильной записи селекторов и манипуляций с DOM-деревом.

  1. Чаще всего HTMLayout изменяет DOM-tree для упрощения форматирования строк внутри структурных блоков (например div-ов). В таких случаях HTMLayout обрамляет строку тегом text. Простой пример применения этого правила можно найти в спецификации CSS 2.1 http://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level

  2. В некоторых случаях behavior может взять на себя обязанности по "достраиванию" DOM-tree, что позволяет упростить html-код и избавить пользователя от рутинных описаний реализации. Типичный пример - упрощение комбобокса.
    <select name="Alignment" size="1">
    <option value="left">Left</option>
    <option value="right">Right</option>
    <option value="center">Center</option>
    </select>

    ( код взят из примера HTMLayoutSDK\html_samples\form-test.htm)
    Данная структура точно описывает семантику комбобокса с точки зрения человека, однако совершенно не годится для HTMLayout, поэтому строчки преобразовываются в
    <select name="Alignment" size="1">
    <caption value="center">Center</caption>
    <button role="dropdown" tabindex="-1"></button>
    <popup type="select">
    <option value="left">Left</option>
    <option value="right">Right</option>
    <option value="center">Center</option>
    </popup>
    </select>

  3. Особенность реализации таблиц внутри HTMLayout.
     <table>
    <tr><td colspan="2">colspan</td></tr>
    <tr><td>1</td><td>2</td></tr>
    </table>

    1. Первая строка будет иметь двух детей
    2. Хендл второго ребенка будет нулевым.


Отдельное спасибо Jim Epler за пост со ссылкой на HTML Encoder

Комментариев нет: