Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   innerHTML для TR в IE (https://javascript.ru/forum/css-html-internet-explorer/25375-innerhtml-dlya-tr-v-ie.html)

Sinot 03.02.2012 11:10

innerHTML для TR в IE
 
Приветствую всех.

Наверняка многие сталкивались с подобной проблемой, что в IE (8) нельзя обратиться к свойству innerHTML для TR, а только к innerText.

Можно было бы выкрутиться методами insertCell, но используется AJAX и теги для строки (и их содержание) формирует PHP скрипт самостоятельно. Причем проект уже довольно сильно разросся и переделывать все под inserCell все равно что заново его переписать.

Есть идеи как мягко переделать уже существующую версию?

Спасибо.

Kolyaj 03.02.2012 11:25

Обращаться к innerHTML можно, изменять нельзя. Ничего с этим сделать тоже нельзя, придётся переписывать.

Sinot 03.02.2012 11:32

Ну да только на чтение. Что ж прискорбно, кому-то придется отказаться от использования IE.

poorking 03.02.2012 11:35

Sinot,
Если бы вы не перемешали модель и представление, то вам бы пришлось переписать только клиентскую часть

Цитата:

Сообщение от Sinot
кому-то придется отказаться от использования IE

Отличный подход, ага, так держать *sarcastic*

Kolyaj 03.02.2012 11:38

Хотя, если заранее известен формат приходящих данных, можно и подхачить. Если с сервера приходят только td и ничего более.

var tableRow; // Строка, в которую надо вставить данные
var serverResponse = '<td></td>'; //Что пришло с сервера
var div = document.createElement('div');
div.innerHTML = '<table><tr>' + serverResponse + '</tr></table>';
var tds = div.getElementsByTagName('td');
while (tds.length) {
    tableRow.appendChild(tds[0]);
}


Должно работать, не тестил.


А вообще, poorking прав, хреновая у вас архитектура.

Sinot 03.02.2012 12:44

Цитата:

Сообщение от poorking
Если бы вы не перемешали модель и представление, то вам бы пришлось переписать только клиентскую часть

В этом была своя логика: как можно меньше обработки на стороне клиента. Плюс ко всему с сервера приходит не только значения ячеек, но еще их свойства и события.
Например на сервере выполняется:
echo('<td class="'.$class.'" onclick="'.$function[0].'">'.$data[0].'</td><td><table><td onclick="'.$function[1].'">'.$data[1].'</td></table></td>');

А на клиенте простое присваивание.

Цитата:

Сообщение от poorking
Отличный подход, ага, так держать *sarcastic*

Именно поэтому IE все еще существует. Помните как загнулась OS/2?


Цитата:

Сообщение от Kolyaj
Хотя, если заранее известен формат приходящих данных, можно и подхачить. Если с сервера приходят только td и ничего более.

Я думал над этим. Можно попробовать.


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