Почему document.getElementById ('tableId'). InnerHTML не работает в IE8?

Я модифицируюdocument.getElementById('').innerHTML с Java Script на странице. Это'Работает нормально в Firefox, но не в IE8. Пожалуйста, смотрите ниже для более подробной информации:

HTML-код:


  
     ccc
  

Код Java Script:

  document.getElementById('abc').innerHTML = 'abc'

Когда я запускаю код JS в Firefox, он меняет отображаемое слово с 'ссс» ка», но это'просто не работает в IE8, кто-нибудь знает почему? Есть ли способ, которым я могу сделать это в IE8?

 SooDesuNe09 сент. 2012 г., 23:49
FWIW, этот тип проблемы именно поэтому я использую jQuery - или какую-то другую библиотеку - для работы с DOM

Ответы на вопрос(8)

innerHTML только для чтения, как указано здесь:http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx

Свойство доступно для чтения / записи для всех объектов, кроме следующих, для которых оно доступно только для чтения: COL, COLGROUP, FRAMESET, HEAD, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR.

Почему вы не просто выдвигаете идею и не меняете эту конкретную ценность?

Спасибо, это очень полезно.html()

Я использовал

document.getElementById('site'+cValue).innerHTML=tableReadyElem; //work with mozila not ie

$(document.getElementById('site'+cValue)).html(tableReadyElem);//work for both

Используйте это вместо:

document.getElementById('abc').innerText = 'ccc';
 undefined07 июл. 2014 г., 08:42
@MatthewLock Firefox не делаетне поддерживаетinnerText как это'Нестандартное свойство, Firefox поддерживает стандартtextContent вместо.
 Matthew Lock28 авг. 2009 г., 05:51
Если вы собираетесь использовать innerText, вы должны обойти тот факт, что Firefox нет (пока?) поддерживаетgoogle.com.au/...
Решение Вопроса

Так как проблема в IE8,см MSDN:

Свойство доступно для чтения / записи для всех объектов, кроме следующих, для которых оно доступно только для чтения: COL, COLGROUP, FRAMESET, HEAD, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE,TR.

(акцент мой)

Colin'Обходной путь (настройкаinnerText наtd вместоinnerHTML наtr) хороший в вашем случае. Если ваши потребности станут более сложными, вы 'придется прибегнуть кОбъектная модель таблицы.

 Rex M28 авг. 2009 г., 05:59
@jin yong var tds = document.getElementById('abc').getElementsByTagName('td'); for(var i=0;i
 scunliffe28 авг. 2009 г., 13:02
Просто дополнение. Это н'Ограничено IE8 - все версии IE страдают от этой внутренней ошибки HTML.tinyurl.com/ltar5f
 Jin Yong28 авг. 2009 г., 03:02
если я хочу изменить весь элемент td, что мне делать? для опыта: код HTLM <стол>   <tr id = "а ">      <тд id = "ссс» стиль =»цвет: красный; ">ссс </ TD>   </ TR> </ Table>   JScode: document.getElementById ('а») .innerHTML = '<тд id = "а» стиль =»Цвет: желтый; ">а </ TD>»

С ТР 's innerHTML доступен только для чтения, как уже говорили некоторые люди, лучше поменять разметку, чтобы нацелиться на TD:

 ... 

Затем вы можете установить содержимое TD по своему усмотрению через innerHTML и изменить другие свойства, установив их на узле DOM:

var td = document.getElementById("changeme");
td.innerHTML = "New Content";
td.cssText = "color: red";
td.className = "highlighted";

Вы поняли идею ...

Это избавляет вас от лишних затрат на уничтожение и создание дополнительного элемента DOM (TD)

По другому вопросу StackOverflow я нашел ссылку на пост в блоге, написанный парнем, который внедрил эту часть движка Trident. Это недостаток дизайна (из-за недостатка времени и проблем с обратной совместимостью), который никогда не был исправлен. Вы можетепрочитайте его заметки (включая его личный обходной путь) здесь.

Однако, чтобы исправить это в моем проекте, так как я уже использовал jQuery, я просто использовал jQuery's.html() функция.

// OLD 
localRows[cIndex].innerHTML = 'Test Div';

// FIXED
$(localRows[cIndex]).html('Test Div'); 

Я считаю, что IE ведет себя странно, когда вы играете с innerHTMLtr элементы. Я бы выбрал строку сgetElementByIdи затем выберите тд и изменитеs innerHTML:

document.getElementById('abc').firstChild.innerHTML = 'abc';

(Хотя вы должны быть осторожны с этим: часто пробел между tr и td будет считаться допустимым узлом)

Там's целая куча специальных функций для работы с таблицами в DOM

var tblBody = document.getElementById(tblId).tBodies[0];
var newRow = tblBody.insertRow(-1);
var newCell0 = newRow.insertCell(0);

Смотрите все функции здесь:http://www.mredkj.com/tutorials/tablebasics1.html

ВместоВы также можете использовать<span></span>

Ваш ответ на вопрос