В эпоху HTML5 можно утверждать, что <input type="checkbox">
и <input type="checkbox" />
являются одинаково действительными представлениями одного и того же пустого элемента.
Хотя это и так, причина innerHTML
по-прежнему сериализует пустые элементы без />
в два раза:
Пустой элемент - это пустой элемент независимо от того, как вы представляете его в браузере. К тому времени, когда браузер сконструировал элемент, его разметка уже не имеет значения, и что касается DOM, то это элемент input
типа checkbox. Единственное место, к которому относится «тег» элемента, - это его свойство tagName
, а даже имеет собственную причуду .
Нет никаких оснований для того, чтобы браузер начинал сериализацию элемента void с синтаксисом />
, когда сам HTML5, поскольку он основан на HTML, а не XML, не делает этого. требовать этого. Делая это только потому, что использование синтаксиса />
одинаково правильно нарушает совместимость с устаревшими сайтами для получения абсолютно нулевого усиления (поскольку наличие />
никак не меняет смысла вывода). Что возвращает нас к ответу Cletus, различающему разметку HTML и разметку XHTML.
innerHTML
и с расширением jQuery.html()
был разработан для предоставления HTML-представления содержимого элемента из DOM . Он не предназначен для предоставления вам HTML-разметки, которую браузер использовал для создания элемента в DOM. Вы не можете "исправить" это, потому что нет ничего, чтобы исправить с самого начала. Что вам нужно сделать, так это избегать использования элемента innerHTML
для чего-либо другого, кроме, возможно, случайного сеанса отладки.
См. Также: Вложенный тег автоматического закрытия / открытия тега