#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: Вы должны передать строку в качестве параметра функции.