20 Май 2008

HTML DOM, JavaScript для добавления/удаления рядов таблицы (часть 1)

posted in JavaScirpt |

Я надеюсь, что вам известно о DOM. Если нет, то рекомендую вначале немного ознакомиться с этой статьей.

Мы попробуем написать JavaScirpt код для добавления/удаления рядов в таблице без использования DHTML функций (addRow, addCell и др.), мы будем использовать функции для манипуляции с деревом DOM такие как appendChild, createElement, createTextNode.

итак, пусть у нас есть такой HTML код:

HTML:
  1. <div id="DOMTree">
  2. <table border="1" cellpadding="5">
  3. <tbody id="myT">
  4. <tr><td>sample 1</td><td>sample text here...</td></tr>
  5. <tr><td>sample 2</td><td>sample text here...</td></tr>
  6. <tr><td>sample 3</td><td>sample text here...</td></tr>
  7. </tbody>
  8. </table>
  9. </div>

Мы хотим создать функцию, которая будет добавлять ряд (<tr>...</tr>) в конец таблицы. Единственный параметр, который мы будем передавать функции - идентификатор элемента TBODY:

JAVASCRIPT:
  1. <script type="text/javascript">
  2. var i=3; // будем использовать переменную i просто для имен 'sample 4', 'sample 5', ...
  3. function AddEndRow(tid) {
  4. // создадим элемент <tr>
  5. var myTR=document.createElement('tr');
  6.  
  7. // создадим первую ячейку (элемент <td>)
  8. var myTD=document.createElement('td');
  9.  
  10. // у нее будет только один дочерний узел - текстовый
  11. myTD.appendChild(document.createTextNode('sample '+(++i)));
  12.  
  13. // создаем вторую ячейку и добавляем к ней дочерний текстовый узел 'sample text here 2...'
  14. var myTD2=document.createElement('td');
  15. myTD2.appendChild(document.createTextNode('sample text here 2 ...'));
  16. // теперь обе ячейки мы присоединяем к ряду (tr)
  17. myTR.appendChild(myTD);
  18. myTR.appendChild(myTD2);
  19. // после єтого строку (tr) присоединяем к tbody
  20. document.getElementById(tid).appendChild(myTR);
  21. }
  22. </script>

на рисунке это будет выглядеть примерно так:

1. [myTR]
2. [myTD]
3. [myTD] | -> 'sample '+(++i)
4. [myTD2]
5. [myTD2] | -> 'sample text here 2...'
6. [myTR] | -> [myTD]
7. [myTR] | -> [myTD]
              | -> [myTD2]
8. [tid] (tbody) | -> first row of our table
                      | ....
                      | -> [myTR]

Теперь добавим кнопку, кликая по которой мы будем вызывать нашу функцию:

HTML:
  1. <form name="" action="" method="">
  2. <input type="button" value="Add row" onClick="return AddEndRow('myT');">
  3. </form>

Нажмите на кнопку и увидите как новый ряд добавляется в конец таблицы :)
Все работает прекрасно во всех браузерах (тестировал на FF 1.5, Safari 3, Opera 9, IE 6+)

Теперь создадим функцию для удаления последнего ряда.

JAVASCRIPT:
  1. function DelLastRow(tid) {
  2. // myTbl -> ссылка на наш Tbody
  3. var myTbl=document.getElementById(tid);
  4. // идем к последнему дочернему элементу tbody - то есть к последнему ряду
  5. var deltr=myTbl.lastChild;
  6. // удаляем этот последний ряд
  7. myTbl.removeChild(deltr);
  8. }

Добавим кнопку в HTML:

HTML:
  1. <input type="button" value="Delete last row" onClick="return DelLastRow('myT');">

Попробуйте :) . Вас ожидает небольшой сюрприз в Safari и Firefox. Вам надо нажать дважды на кнопку, чтоб удалить ряд, а в Opera и Internet Explorer все работает хорошо. Также заметьте, что ряды, которые добавлены используя нашу функцию AddEndRow удаляются с первого клика во всех браузерах. Почему? Завтра я вам расскажу... ;)
продолжение следует

Оставить комментарий

Пневмонагнетатель способен перекачивать растворы с осадкой конуса 3-8 см вакансии разовая работа харьков

263

моб телефон камера nokia 6120 купить nokia