Другой дочерний элемент приложения не работает в IE

#javascript #internet-explorer

#javascript #internet-explorer

Вопрос:

У меня есть функция appendChild JS, которая прекрасно работает во всех браузерах, кроме IE.

Я использую массив JS и добавляю эти данные в таблицу.

http://jsfiddle.net/2waZ2/51 / Имеет код — и отлично работает в скрипке!

Я просмотрел другие ответы, и их проблемы, похоже, немного отличаются от моих. Может быть, мне просто нужно создать tbody, но я действительно не знаю, как это сделать.

Каков наилучший способ переписать это для работы в Ie?

Добавьте часть кода, как в скрипке:

 var row =  document.createElement('tr');
row.innerHTML = displayArrayAsTable(QR4, 24, 25);
document.getElementById('mytable').appendChild( row ) ; 

function displayArrayAsTable( array, from, to ) {
  var array = array || [],
  from = from || 0,
  to = to || 0;
 var html = '';

 if ( array.length < 1 )
{
  return;
}
if ( to == 0 )
{
    to = array.length - 1;
}
for ( var x = from; x < to   1; x   )
 {
html  = '<td>'   array[x]   '</td>';
}
 return html;
}
  

Комментарии:

1. Вы хотите это: developer.mozilla.org/en/DOM/table.insertRow

Ответ №1:

Лучшим способом было бы использовать insertRow [MDN]:

 var row = document.getElementById('mytable').insertRow(-1);
row.innerHTML = displayArrayAsTable(QR4, 24, 25);
  

Что касается tBody : Да, это может быть проблемой. Браузер всегда генерирует tBody элемент, независимо от того, указан он в HTML или нет.
Возможно, вы можете решить свою проблему, просто добавив новую строку к этому tBody элементу:

 document.getElementById('mytable').tBodies[0].appendChild( row );
  

Но я помню, что читал, что у IE были проблемы с манипулированием таблицами с помощью обычных методов манипулирования DOM. Применимо ли это и в этом случае, я не знаю. insertRow должно работать в любом случае.

Обновление: действительно, похоже, что IE не любит добавлять td элементы ни с innerHTML тем, ни с другим. Решением было бы передать row также в качестве параметра displayArrayAsTable и использовать insertCell [MDN] для создания новой ячейки.

Обновление 2: например, вы можете сделать это так:

 for ( var x = from; x < to   1; x   )
{
    var cell = row.insertCell(-1);
    cell.innerHTML = array[x];
}
  

где row является четвертым параметром функции и вызывается как:

 var row = document.getElementById('mytable').insertRow(-1);
displayArrayAsTable(QR4, 24, 25, row);
  

Комментарии:

1. Я попробовал это, и я не вижу, чтобы это работало — bakerscottage.com/xx.html нормально в Firefox, а не в IE?

2. Я добавил код displayArrayAsTable. Я получил его отсюда. Я пробовал вставную ячейку из MDN, поскольку я видел, что она работает в IE. Но я не смог получить более одной ячейки или интегрировать ее с моим массивом. Я немного новичок в этом. Есть ли шанс, что я мог бы увидеть пример того, как это сделать с моим кодом?

3. Мне потребовалось некоторое время, чтобы понять, как применять код, даже если он был передан на тарелке. Работает мечта. Большое спасибо. Я думаю, что я медленно понимаю это…

4. Кажется, у меня много переменных строк. row1 row2 row3 row4 и т. Д. Теперь, Когда оно находится в функции displayArrayAsTable, единственный способ, которым я могу создавать переменные с несколькими строками, — это сделать несколько функций displayArrayAsTable1, удерживающих row1, displayArrayAsTable2, удерживающих row2 и т. Д. Есть ли лучший способ?

5. @Jon: Вы должны передать строку в качестве параметра функции.