Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Парсинг строки при создании элемента (https://javascript.ru/forum/jquery/51226-parsing-stroki-pri-sozdanii-ehlementa.html)

demoniqus 29.10.2014 10:55

Парсинг строки при создании элемента
 
Наткнулся при использовании IE8 на злобную особенность парсинга: $('<input></input>') порождает два DOM-объекта. Я бы мог это списать на то, что input по идее не имеет закрывающего тега... но аналогичные теги $('<img></img>') и $('<br></br>') порождают всего по одному DOM-объекту, хотя также не имеют в оригинале закрывающих тегов (<br></br> - это вообще ахинея полная и никто никогда так не пишет))) ). С другой стороны, насколько мне помнится, к написанию $('<input></input>') меня привел тот факт, что в каком-то браузере $('<input />') привел к ошибке парсинга. Может кто-то знает объяснение этой проблемы и подобные примеры еще?

krasovsky 29.10.2014 11:55

Цитата:

Сообщение от demoniqus
Я бы мог это списать на то, что input по идее не имеет закрывающего тега...

По идее он в принципе не имеет закрывающего тега, а не по идее. Так же как и img и br.

Цитата:

Сообщение от demoniqus
$('<input></input>') меня привел тот факт, что в каком-то браузере $('<input />')

Интересно в каком??

demoniqus 29.10.2014 12:24

Теперь уже не вспомнить, в каком браузере была ошибка при $('<input/>')... хотя скорее всего это также был IE...
Сейчас у меня закралось некоторое подозрение, что проблема $('<input></input>') возникает из-за какой-то библиотеки... т.к. недавно также решал проблему, характерную только для IE - виновата оказалась библиотека infragistics, которая навешивала свои дополнительные методы на Array.prototype. Эти методы то ли поменяли сущность массива. превратив его в объект. то ли фиг знает что произошло, но они стали попадать в итерацию через for in (во всех других браузерах массив вел себя стандартно и дополнительные методы не попали под действие for in). По крайней мере я тупо открыл яндекс в отладчике, выполнил такое же контрольное значение и получил лишь один элемент...

danik.js 29.10.2014 17:09

Цитата:

Сообщение от demoniqus
Теперь уже не вспомнить, в каком браузере была ошибка при $('<input/>')... хотя скорее всего это также был IE

Вспоминай. Я например не знал, но хотелось бы знать. Хотя скорее всего ты чета перепутал и <input/> нормально парсится. Я бы еще пробел поставил перед слэшем (не уверен зачем, но лучше поставить).

danik.js 29.10.2014 19:06

Цитата:

Сообщение от demoniqus
'<input></input>'

Вообще, это некорректная разметка. Второй тег будет просто проигнорирован (причем это Parse Error, но он никуда не репортится, разве что в инструменты разработчика).


Часовой пояс GMT +3, время: 16:07.