Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание строк таблицы, где ошибка? 
V
    Опции темы
Sunvas
Дата 15.4.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: нет
Всего: 89



Надо динамически добавлять в конец таблицы одну строку. Вот, что пишу:
Код

<body>

<script type="text/javascript">    

  function add(d)    
  {    
  d.parentNode.appendChild(d.cloneNode(true))    
   }    

</script>
<p>&nbsp;</p>
<table border="1" width="100%" id="table1">
    <tr>
        <td>&nbsp;</td>
    </tr>
    <tr id="ed">
        <td>Текст</td>
    </tr>
</table>
<p><input type="button" value=" + " onclick="add(ed)"></p>

</body>


Но при этом добавляется одна строка только при первом клике. Где ошибка? Как ее исправить?  smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
butionok
Дата 15.4.2007, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 19.1.2005

Репутация: 1
Всего: 3



Sunvas

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

Вот так можно сделать:
Код

function add(d)    
  {    
  var newline=d.parentNode.appendChild(d.cloneNode(true));
  newline.id=d.parentNode.childNodes.length;
   } 
 
--------------------
Ненавижу убогую Оперу.
PM MAIL ICQ   Вверх
SelenIT
Дата 15.4.2007, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



butionok, а нельзя ли клонировать Вашу телепательную машинку? Лично меня приведенный фрагмент кода вообще поставил в тупик...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Sunvas
Дата 15.4.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: нет
Всего: 89



butionok, спасибо.  smile 
Да, забыл в первом посте дописать.
А как написать процедуру, которая бы удаляла последнюю строку?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
butionok
Дата 15.4.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 19.1.2005

Репутация: 1
Всего: 3



SelenIT

Дело в том, что Вы эксперт, а для меня JS это хобби. Воззрение проблемы другое.  Если хотите легко понимать проблемы новичков надо деградировать  smile 

Кстати меня удивило, что со слов Sunvas
 
Код

onclick="add(ed)"


работает. Или он забыл поставить ed в кавычки. Я просто его код не проверял.

Sunvas, удаление строки

Код

function removeLast(table)
    {
    var table=document.getElementById(table);
    table.childNodes[0].removeChild(table.childNodes[0].childNodes[table.childNodes[0].childNodes.length-1]);
    } 


Использование:

Код

<p><input type="button" value=" - " onclick="removeLast('table1')"></p>


Кстати если ты удалишь строчку с ID="ed", то функция add(d) выдаст ошибку. Так что не удивляйся и лучше пересмотри логику.
 


Это сообщение отредактировал(а) butionok - 15.4.2007, 23:28
--------------------
Ненавижу убогую Оперу.
PM MAIL ICQ   Вверх
SelenIT
Дата 15.4.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Sunvas, вариант удаления строки:
Код

table.getElementsByTagName('tbody')[0].removeChild(table.rows[table.rows.length-1])

ой, даже ещё проще:
Код

table.deleteRow(table.rows[table.rows.length-1])


butionok, хм, проблема в другом - для меня код в посте Sunvasа закончился строкой 3 (<script type="text/javascript">), никаких add(ed) я просто не видел...

...кстати, Ваш вариант удаления не работает в Gecko, из-за все тех же <CENSORED> пробелов в коде, зачисляемых в childNodes...

Это сообщение отредактировал(а) SelenIT - 15.4.2007, 23:42


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
butionok
Дата 16.4.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 19.1.2005

Репутация: 1
Всего: 3



SelenIT

Да, точно. Я про deleteRow знал, просто я как-то перепутал и решил что это фича IE, а не DOM.
А что за  эти <CENSORED> пробелы в коде и зачем их зачисляют в childNodes?
--------------------
Ненавижу убогую Оперу.
PM MAIL ICQ   Вверх
SelenIT
Дата 16.4.2007, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(butionok @  16.4.2007,  00:12 Найти цитируемый пост)
как-то перепутал и решил что это фича IE, а не DOM

Судя по всему, всё-таки DOM, вполне себе стандартный.

Цитата(butionok @  16.4.2007,  00:12 Найти цитируемый пост)
А что за  эти <CENSORED> пробелы в коде и зачем их зачисляют в childNodes?

В Gecko-браузерах (и, видимо, в "убогой Опере" тоже - вообще по стандарту W3C, в этом месте действительно малость не до конца продуманному) пробелы между тегами в коде считаются текстовыми нодами и добавляются в DOM-дерево. Так что если между <table> и <tbody> (особенно "виртуальным") есть пробел/перенос строки - именно он будет считаться table.childNodes[0]. Выхода два - либо брать не просто первый чайлд элемента, а первый чайлд определенного типа/с определенным свойством, или... (в частном случае таблиц) пользоваться специализированными коллекциями ;).


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
butionok
Дата 16.4.2007, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 19.1.2005

Репутация: 1
Всего: 3



SelenIT

Про текстовые ноды не знал. Видать они (W3C) хотели чтоб жизнь не казалась программисту малиной.
--------------------
Ненавижу убогую Оперу.
PM MAIL ICQ   Вверх
smartov
Дата 16.4.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



SelenIT, под FF первый пост неверно отображается.  уже зарепортил баг
PM MAIL   Вверх
butionok
Дата 16.4.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 19.1.2005

Репутация: 1
Всего: 3



Лишний раз убедился что IE рулит.
--------------------
Ненавижу убогую Оперу.
PM MAIL ICQ   Вверх
smartov
Дата 16.4.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



butionok, флейм и религиозные войны находятся в других форумах.
PM MAIL   Вверх
butionok
Дата 16.4.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 19.1.2005

Репутация: 1
Всего: 3



smartov

А это тут при чём?
--------------------
Ненавижу убогую Оперу.
PM MAIL ICQ   Вверх
SelenIT
Дата 16.4.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



smartov, спасибо! То-то я никак не мог понять, что у butionkа за телепательная машинка... а оказывается, это MSIE - Mental Speculations Intelligent Extrapolator smile.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Sunvas
Дата 16.4.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: нет
Всего: 89



Всем спасибо.  smile 
Следующий раз стучите в ПМ или асю, если что не ясно. smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1201 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.