Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Очистка динамической таблицы (https://javascript.ru/forum/dom-window/46804-ochistka-dinamicheskojj-tablicy.html)

Veterinar 24.04.2014 21:47

Очистка динамической таблицы
 
В скрытом окне "dialog" есть таблица с заголовками, при открытии окна, в эту таблицу загружаются Аяксом данные, добавляя строки.

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

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

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

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

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

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

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

рони 24.04.2014 22:47

Veterinar,

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

рони 24.04.2014 22:54

Veterinar,
for (; document.getElementById('show_equipment').getElementsByTagName('tr').length > 1; ) {
document.getElementById('show_equipment').deleteRow(1);
}

Veterinar 24.04.2014 22:56

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

рони 24.04.2014 23:00

Цитата:

Сообщение от Veterinar
Оно и удаляет, только никак не возьму в толк, почему не все строки?

читайте ссылку - там написано почему.
<!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').getElementsByTagName('tr').length -1; i; i--) {
document.getElementById('show_equipment').deleteRow(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
На сколько помню, приведенная запись, работает по разному в разных браузерах

вспомните пожалуйста в каком браузере это несработает иначе зачем писать предположения что это может где-то несработать.


Часовой пояс GMT +3, время: 11:53.