Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: Night_Wolf от 22 Ноября 2007, 17:01:29

Название: Удаление строк таблицы (DOM)
Отправлено: Night_Wolf от 22 Ноября 2007, 17:01:29
Приветствую,

Просвятите, плз, по какому косяку такая реализация не хочет работать (нужно удалить все строки таблицы)?

function TableClear()
{
var newElem = parent.document.getElementById("u_table");
    for (var i=0; i{  
newElem.deleteRow(i);  
}
}
 

Строки удаляет, но оставляет одну строку с rowIndex=1.
Название: Удаление строк таблицы (DOM)
Отправлено: brainkiller от 22 Ноября 2007, 17:38:00
Попробуйте


function TableClear()
{
  var newElem = parent.document.getElementById("u_table").getElementsByTagName("TBODY")[0];
  while(newElem.hasChildNodes())
  {
    newElem.removeChild(newElem.firstChild());
  }
}
Название: Удаление строк таблицы (DOM)
Отправлено: Night_Wolf от 22 Ноября 2007, 17:49:24
brainkiller , так вообще не хочет: "Команда не поддерживается объектом".
Название: Удаление строк таблицы (DOM)
Отправлено: hanslinger от 22 Ноября 2007, 17:56:10
brainkiller
tbody по дефолту выставляет только FF


function tableClear()
{
  var rows = document.getElementById(\'tableId\').getElementsByTagName(\'tr\');
  for (var i = 0; i < rows.length; i++)
  {
    rows[i].parentNode.removeChild(rows[i]);
  }
}

может как-нибудь так
Название: Удаление строк таблицы (DOM)
Отправлено: Night_Wolf от 22 Ноября 2007, 18:02:47
hanslinger, спасибо за вариант. Но результат тот же, что и у моего начального - в таблице остаеться одна строка, хоть убей!
Название: Удаление строк таблицы (DOM)
Отправлено: Night_Wolf от 22 Ноября 2007, 18:16:20
Вот что еще заметил: если функцию tableClear() запустить дважды, то удалит за второй заход оставшуюся строку. За раз не хочет ни в какую.
Название: Удаление строк таблицы (DOM)
Отправлено: andymc от 22 Ноября 2007, 19:54:40
Night_Wolf
значит индексы рядов при удалении смещаются
ПОпробуй
function TableClear()
{
var newElem = parent.document.getElementById("u_table");
         for (var i=0; i{          
newElem.deleteRow(0);      
}
}
Название: Удаление строк таблицы (DOM)
Отправлено: Night_Wolf от 23 Ноября 2007, 01:09:51
andymc, идею понял, попробовал. Результат тот же.
Видимо действительно индексы рядов смещаються. Даже при принудительной установке индекса deleteRow глючит. Видать это какой-то баг ф-и DOM-а в самом Javascript. Еще заметил, что чем больше рядов в таблице, тем больше их остаеться после прогона через deleteRow.
Если б это еще обойти можна было?..

Пока думаю над альтернативой: поместить таблицу в DIV или SPAN, и удалять всю таблицу путем innerHTML. Правда потом придеться таблицу заново "рисовать", а это уже значительно трудо- и ресурсо-емней:(
Название: Удаление строк таблицы (DOM)
Отправлено: Altaxar от 23 Ноября 2007, 10:12:40
Night_Wolf
Тебе немного подсказали в чем дело, осталось немного домыслить, и не какой это не глюк DOM. я б сказал где ошибка, только ты обидешся, если не понимаешь юмора.
Вот решение:

function TableClear()
{
var newElem = parent.document.getElementById("u_table");
         for (var i=newElem.rows.length-1; i>=0; i--)
{          
newElem.deleteRow(i);      
}
}
Название: Удаление строк таблицы (DOM)
Отправлено: Night_Wolf от 23 Ноября 2007, 12:13:16
Altaxar, ты прав. Да чего там обижаться:)
Выходит это все от того, что на изнанку прогонялось! Cам бы не додумал. Всем спасибо.
Название: Удаление строк таблицы (DOM)
Отправлено: brainkiller от 23 Ноября 2007, 13:21:00
hanslinger
да, как-то не подумал. У меня в текущем проекте все таблицы имеют tbody и thead.