Вход

Просмотр полной версии : Очистка динамической таблицы


Veterinar
24.04.2014, 21:47
В скрытом окне "dialog" есть таблица с заголовками, при открытии окна, в эту таблицу загружаются Аяксом данные, добавляя строки.

При каждом новом открытии этого окошка данные загружаются снова, так-как параметры загрузки меняются.

При закрытии окна хорошо бы почистить таблицу, удалив добавленные к заголовкам строчки с данными.

Пожалуйста, подскажите, как узнать кол-во строк в таблице и как удалить все строки после первой (строка с заголовками).

В результате всяческой дури докатился вот до такого:
for (var i = 1; i<document.getElementById('show_equipment').getEleme ntsByTagName('tr').length; i++) {
document.getElementById('show_equipment').deleteRo w(i);
}

Но даже эта бредятина не удаляет все строчки...

На JQUERY чо-то ничего путного не нашел, хотя, разумеется, всё это реализовано.

ЗЫ: не стреляйте в пианиста - он играет как умеет!

рони
24.04.2014, 22:47
Veterinar,

и читайте форум
http://javascript.ru/forum/misc/46778-nepravilnoe-udalenie.html

рони
24.04.2014, 22:54
Veterinar,
for (; document.getElementById('show_equipment').getEleme ntsByTagName('tr').length > 1; ) {
document.getElementById('show_equipment').deleteRo w(1);
}

Veterinar
24.04.2014, 22:56
рони, удалять весь узел для чего?
Насколько я читал в JS есть способ удаления строки: .deleteRow(i), где i - номер строки. Оно и удаляет, только никак не возьму в толк, почему не все строки? Подскажите пожалуйста!
document.getElementById('show_equipment').getEleme ntsByTagName('tr').length - возвращает правильное кол-во, а в цикле от 1 до кол-ва строк удаляются не все...

рони
24.04.2014, 23:00
Оно и удаляет, только никак не возьму в толк, почему не все строки?
читайте ссылку - там написано почему.
<!DOCTYPE HTML>

<html>

<head>
<title>Untitled</title>
</head>

<body>
<table id="show_equipment">
<tr>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>5</td>
</tr>
</table>
<script>

for (var i = document.getElementById('show_equipment').getEleme ntsByTagName('tr').length -1; i; i--) {
document.getElementById('show_equipment').deleteRo w(i);
}
</script>
</body>

</html>

рони
24.04.2014, 23:03
Veterinar,
length автоматически пересчитывается при удалении

Veterinar
24.04.2014, 23:12
рони, спасибо!
Если честно, то не все понял, но постараюсь разобраться.
Пока не понятно в связи с чем возникает проблема в четности-нечетности.

Veterinar
24.04.2014, 23:13
рони, во как! Спасибо огромное!

M-ka
25.04.2014, 15:05
var i = document.getElementById('show_equipment').getEleme ntsByTagName('tr').length -1;

На сколько помню, приведенная запись, работает по разному в разных браузерах, так, как в ней написано не взять числовое значение количества элементов при обходе и уменьшать на 1. Хотелось бы получить длину массива уменьшенную на единицу для получения индекса элемента массива на итерацию цикла, но по факту происходит уменьшения индекса самой коллекции...
Такую ошибку браузеры по разному обрабатывают, кто то умалчивает и считает, как обход, а некоторые выдают ошибку или не правильно чето делают...
Точно уже не помню, но когда то столкнулся сам с подобной проблемой при обходах в циклах с length -1, так, не учел, что у нас возвращается на самом деле при getElements не массив, а коллекция элементов и это немного разные вещи. С учетом попытки уменьшения индекса вызывало проблему в цикле, вот только не помню на каком браузере и всех деталей но доставило все же проблем...

рони
26.04.2014, 13:47
На сколько помню, приведенная запись, работает по разному в разных браузерах
вспомните пожалуйста в каком браузере это несработает иначе зачем писать предположения что это может где-то несработать.

M-ka
28.04.2014, 13:29
вспомните пожалуйста в каком браузере это несработает иначе зачем писать предположения что это может где-то несработать.

Уверен, что в какой то с версий ИЕ была проблема(возможно там еще была зависимость с ОС, к сожалению столь мелких деталей не помню). Это не предположения, а проблема с которой сталкивался при работе с коллекцией элементов при уменьшении индекса коллекции. Хотел бы поискать в логах свн"а, но к сожалению к тому репозиторию уже нет доступа, что бы найти в логах, скопировать полностью пример и показать. Но помню, что фикса заключалась в том, что в итоге пришлось переделать цикл, что бы не работать с уменьшением на единицу коллекции элементов.

Ну вообщем, что могу еще добавить, только следующее.
Предупреждены, значит вооружены... Сами решайте, прислушаться или проигнорировать проблему.

рони
28.04.2014, 15:23
уменьшении индекса коллекции
где вы нашли в коде уменьшение индекса коллекции???
var i = document.getElementById('show_equipment').getEleme ntsByTagName('tr').length -1;
указаннная вами строка неимеет никакого отношения к вашим рассуждениям

M-ka
28.04.2014, 15:51
рони,где вы нашли в коде уменьшение индекса коллекции???
document.getElementById('show_equipment').getEleme ntsByTagName('tr').length -1;

document.getElementById('show_equipment').getEleme ntsByTagName('tr') возвращает не массив тегов, а HTMLCollection[.....]

рони
28.04.2014, 15:56
M-ka,
и какая связь в ваших предложениях? length то никак неизменяется!!!

M-ka
28.04.2014, 15:58
M-ka,
и какая связь в ваших предложениях? length то никак неизменяется!!!

Это вы так думаете, но некоторые браузеры с вами не согласятся...

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

рони
28.04.2014, 16:17
M-ka,пока ненайдёте браузер в котором document.write выдадут разные значения, ваши слова бред.
<html>

<head>
<title>Untitled</title>
</head>

<body>
<table id="show_equipment">
<tr>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>5</td>
</tr>
</table>
<script>
document.write(document.getElementById('show_equip ment').getElementsByTagName('tr').length);
var i = document.getElementById('show_equipment').getEleme ntsByTagName('tr').length -1;
document.write(document.getElementById('show_equip ment').getElementsByTagName('tr').length);
</script>
</body>

</html>