Как при помощи JS очистить таблицу?

Ashotovich

Новичок
Как при помощи JS очистить таблицу?

Всем доброго дня.
Я динамически формирую на странице некую таблицу: при помощи innerHTML создаю в таблице строки, ячейки и заполняю их:
Код:
tablename.tBodies[0].insertRow()
tablename.tBodies[0].rows[<счетчик>].insertCell()
tablename.tBodies[0].rows[<счетчик>].cells[<счетчик>].innerHTML = "blahblah"
Но затем я хочу очистить содержимое таблицы и, по аналогии, пытаюсь провести такую штуку: tablename.tBodies[0].innerHTML = "". Но в результате получаю сообщение "Неизвестная ошибка выполнения". Браузер - IE 5.5.

Подскажите, пожалуйста, как решить проблему и что я делаю неправильно.
Заранее спасибо.
 

А.Л.

Guest
Re: Как при помощи JS очистить таблицу?

MSDN: innerHTML
The property is read/write for all objects except the following, for which it is read-only: COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR.
Почему бы не пользоваться стандартным tBody.deleteRow(index)?
Да и вместо innerHTML лучше использовать стандартные DOM-методы - тогда будет работать во всех DOM-браузерах.
 

Ashotovich

Новичок
А.Л.,

Спасибо большое!
DOM использовать, конечно, универсальней, но у меня кроме IE люди ничем не пользуются, а с InnerHTML код получается компактней - для меня объем страницы критичен: пользователи порой и на 9600 соединяются по полчаса (регионы, млин).
Попробую, о результатх постараюсь сообщить. ;)

С уважением.

-~{}~ 24.05.04 16:05:

Как показала практика, в цикле выражение tablename.tBodies[0].rows.length пересчитывается при каждом шаге цикла, так что для удаления в цикле всех строк таблицы приходится удалять задом наперед:
Код:
for (i=tablename.tBodies[0].rows.length-1; i>=0; i--) {tablename.tBodies[0].deleteRow(i);}
 

А.Л.

Guest
Код:
while (tablename.tBodies[0].rows[0]) {
    tablename.tBodies[0].deleteRow(0);
}
:)
 

А.Л.

Guest
А чего уж мелочиться-то, строчки по одной удалять?
Код:
tablename.replaceChild(document.createElement('TBODY'), tablename.tBodies[0])
 

Ashotovich

Новичок
О, вот и DOM прикрутили! ;)

Да, возникла очередная проблема. При создании каждой ячейки я присваиваю ей свойство onclick:
Код:
tablename.tBodies[0].rows[<счетчик>].cells[<счетчик>].onclick = 'alert("123")'
При этом свойство послушно присваисвается (при выводе в конце скрипта проверочного alert(tablename.tBodies[0].innerHTML) каждая ячейка таблицы представляется в виде <td onclick='alert("123")'>), но при этом никакие клики на ячейках таблицы ни к чему не приводят - onclick не срабатывает. В чем может быть дело?
Заранее спасибо.
 

MD

Guest
дело в том, что при динамическом создании элементов, на онклик прописывается не стринг.
PHP:
function onclk ()
{
    alert(event.srcElement.id);
}
tablename.tBodies[0].rows[<счетчик>].cells[<счетчик>].onclick = onclk;
 

MD

Guest
еще можно так ...
obj.onclick = function() {yourFunc('witharg1', 'witharg2')}
это когда нужно передать аргументы.
 

Ashotovich

Новичок
Угу. Видимо, так и буду делать. Спасибо!

Да, почему-то не работает это все дело ни в Опере, ни в Мозилле...
 
Сверху