Почему firebug автоматически вставляет </p>? - PullRequest
2 голосов
/ 12 июля 2011

Я использую «Edit Html» в firebug и вставляю следующий бит кода:

  <div title="show-details">
    X
    <p class="quick-details">
      <p title="about-player">
        <p title="name">Drew Brees #9</p>
        <p title="position">Quarterback</p>
        <p title="team">The Saints</p>
      </p>
    </p>
  </div>

Однако, когда я выхожу из режима редактирования html, то, что на самом деле находится в DOM, таково:

<div title="show-details">
    X
    <p class="quick-details">
      </p><p title="about-player">
    </p><p title="name">Drew Brees #9</p>
        <p title="position">Quarterback</p>
        <p title="team">The Saints</p>
      <p></p>
    <p></p>
  </div>

Я что-то упускаю из-за того, как работает элемент p?MDC говорит, что контент может быть любым элементом потока.Откуда эти </p>?Это Firefox?firebug?

Отредактируйте, прежде чем я приму ответ: Так что, очевидно, <p> не может вкладываться в <p>, означает ли это, что MDC неверен или что яя как-то неверно истолковал это?

Ответы [ 5 ]

7 голосов
/ 12 июля 2011

Неверно вкладывать <p> элементов.

Firefox анализирует HTML, чтобы получить дерево DOM. Дерево DOM всегда правильно сформировано , даже если исходный код отсутствует. Это представление может также представлять пробелы и escape-коды по-разному.

Firebug в основном работает с представлением DOM. Это

  • проще,
  • менее подвержен ошибкам интерпретации,
  • и позволяет диагностировать плохо написанный HTML.

Firebug будет ссылаться на источник только для таких вещей, как отладка скриптов.

3 голосов
/ 12 июля 2011

из документации w3

Элемент P представляет абзац. Не может содержать уровень блока элементы (включая сам P).

http://www.w3.org/TR/html401/struct/text.html#h-9.3.1

3 голосов
/ 12 июля 2011

Вероятно, это происходит потому, что <p> являются block-level элементами и не могут содержать другие block-level элементы.

Firebug компенсирует и автоматически исправляет.

2 голосов
/ 12 июля 2011

Поскольку элемент p не разрешен внутри другого элемента p, а его конечный тег является необязательным, Firebug (или, скорее, базовый синтаксический анализатор HTML / SGML) вставляет конечный тег, где он (правильно) угадывает там должен быть один.

Редактировать: Спецификация HTML 4.01 очень ясна в этом; Вы не можете вкладывать p элементов (и в этом отношении MDC неверен). Спецификация HTML5 , однако, очень неясна по этому вопросу (я отправил отзыв по этому вопросу) Спецификация HTML5 предельно ясна по этому вопросу, я просто читаю ее неправильно и здравый смысл, а также типографский эффект требуют, чтобы абзац текста (который представляет элемент p) не мог содержать второй абзац текста.

0 голосов
/ 12 июля 2011
<div title="show-details">
  X
  <div class="quick-details">
    <div title="about-player">
      <p title="name">Drew Brees #9</p>
      <p title="position">Quarterback</p>
      <p title="team">The Saints</p>
    </div>
  </div>
</div>
...