can3p (can3p) wrote,
can3p
can3p

Записки сумасшедшего или innerHTML против таблиц

Есть подозрение, что существует неофициальный заговор разработчиков браузеров с целью заставить дизайнеров перейти от табличной верстки к верстке с помощью div-элементов. Каждый из большой тройки (internet explorer, firefox, opera) имеет свои уникальные и неповторимые особенности при работе с ними.

Осел знаменит тем, что сделал поля innerHTML доступными только для чтения для тегов TABLE, TR, THEAD, TBODY. Возможно это особенности реализации, скажете вы. Иначе табличка корректно не отрисуется. Но взамен потери возможности записи разработчики сделали подарок все веб-разработчикам: ворох функций, в целом дополняющих функционал обратно, но нис кем больше не совместимые! Ура разрабам! Расцеловать готов.

Разработчики firefox были мудрее и оставили innerHTML доступным для записи везде. Но из-за предыдущего абзаца и желания сделать что-то работающее на всех платформах я решил копнуть глубже. Знаете, любознательность позволяет делать великие открытия.
Есть функция document.createElement(“tag”), и она во всех браузерах работает. Отлично, создаем тег div и запихиваем в innerHTML(в этом случае rw везде) нужный кусок текста. Кусок текста разбирается на теги, и все это вставляется в DOM-структуру относительно этого элемента. Фокус заключается в том, что например тег строку вида “<tr>text</tr>” туда подсовывать бесполезно. Разработчики посовещались и решили просто вырезать эти теги из содержимого переменной, не нравятся они видимо. В результате получаем вместо строки для таблицы просто text. Все остальные теги разбираются нормально. Смех, да и только!

Но если с этими двумя шедеврами инженерной мысли все понятно, то Opera остается полной загадкой. Достоверно известно, что она иногда обрабатывает тег innerHTML. Больше неизвестно ничего, потому что нет ни подробной документации ни свидетельств очевидцев.

Продолжаю раскопки

UPD: оказалось, что весь этот кошмар с innerHTML происходил потому, что некоторым строкам в разных таблицах были присвоены одинаковые идентификаторы. Если сделать идентификаторы уникальными, то все замечательно отрабатывает во всех браузерах.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 6 comments