innerHTML
- это анализатор, когда вы пишете в него, и сериализатор, когда вы читаете, а не простое свойство, которое хранит текст.
Когда вы пишете в innerHTML
, он преобразует исходный текст HTML в объекты DOM, такие как Element, Attr и TextNode. Именно эти DOM-объекты отражают реальное состояние документа в окне браузера, а , а не все, что выглядит как источник HTML.
При записи любая информация, которая не имеет значения для «набора информации», хранящегося в DOM, теряется. Это включает в себя такие вещи, как регистр (независимо от того, был ли ваш тег <b>
или <B>
), порядок атрибутов, пробелы внутри тегов, ссылки на сущности и символы (т. Е. Сказали ли вы café
, café
или café
- это все то же самое для анализатора HTML) и многое другое.
Чтение только что написанного innerHTML
приведет к повторной сериализации проанализированного DOM и вернет вам что-то, что не обязательно будет той же строкой, что и вставленная вами. Если вы допустили ошибки в исходном HTML, вы ' Вы также обнаружите, что выходные данные были исправлены, чтобы отразить то, что сделал анализатор HTML, чтобы иметь возможность прочитать то, что вы вставили. Таким образом, неверный пустой амперсанд обязательно превратится в &
.
(Я не уверен, к какому типу «редактора» вы обращаетесь, но если это <textarea>
, то он дополнительно исправит <
до <
в любом HTML-коде, который вы в него пишете, потому что текстовая область не может содержать разметку. Также довольно странно и не нужно, чтобы вы передавали обратно закодированные данные в формате responseText
; вы уверены, что это происходит?)
ETA:
должно быть значением = "http://www.youtube.com/v/iaysTVcounI?version=3&hl=en_US&rel=0"
Нет, не должно. Это не правильный HTML. Экранирование от &
s до &
- абсолютно правильная, обязательная вещь.