Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.05.2012, 18:38
Новичок на форуме
Отправить личное сообщение для Pyrex Посмотреть профиль Найти все сообщения от Pyrex
 
Регистрация: 15.05.2012
Сообщений: 3

У меня nextSibling работает с вложенными div и не работает с вложенными таблицами
При добавлении поля в многоуровневом диве скрипт работает правильно, добавляя поле после нажатой кнопки; а со вложенной таблицей добавляет только в конец, вне зависимости от того, какая кнопка нажата.В чём дело?
Страница с дивами:
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    
    <script type="text/javascript">
    var count = 0;
    function add_input(obj,parDiv)
{
  count = count + 1;
  var new_input=document.createElement('div');
  new_input.innerHTML='<div><div><div><input value="поле #'+count+'"><input type="button" value="+" onclick="add_input(this.parentNode.parentNode.parentNode.parentNode,''+parDiv+'')"><input type="button" value="-" onclick="del_input(this.parentNode.parentNode.parentNode.parentNode,''+parDiv+'')"></div></div></div>';
  if (obj.nextSibling)
    document.getElementById(parDiv).insertBefore(new_input,obj.nextSibling)
  else document.getElementById(parDiv).appendChild(new_input); 
}
function del_input(obj,parDiv)
{
  document.getElementById(parDiv).removeChild(obj)
}
    
    </script>    
    <title>
    </title>
  </head>
  <body>
    div 4-го уровня
    <div id="content">
      <div>
        <div>
          <div>
            <div>
            <input name="date" class="date_input" size="20">
            <input type="button" value="+" onclick="add_input(this.parentNode.parentNode.parentNode.parentNode,'content')">
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>

Страница с таблицей:
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    
    <script type="text/javascript">
    var count = 0;
    function add_input(obj,parDiv)
{
  count = count + 1;
  var new_input=document.createElement('div');
  new_input.innerHTML='<table><tr><td><input value="поле #'+count+'"></td><td><input type="button" value="+" onclick="add_input(this.parentNode.parentNode.parentNode,''+parDiv+'')"><input type="button" value="-" onclick="del_input(this.parentNode.parentNode.parentNode.parentNode.parentNode,''+parDiv+'')"></td></tr></table>';
  if (obj.nextSibling)
    document.getElementById(parDiv).insertBefore(new_input,obj.nextSibling)
  else document.getElementById(parDiv).appendChild(new_input); 
}
function del_input(obj,parDiv)
{
  document.getElementById(parDiv).removeChild(obj)
}
    
    </script>    
    <title>
    </title>
  </head>
  <body>
    динамические таблицы
    <div id="content">
      <div>
        <table>
          <tr>
            <td>
            <input name="date" class="date_input" size="20">
            <input type="button" value="+" onclick="add_input(this.parentNode.parentNode.parentNode,'content')">
            </td>
          </tr>
        </table>
      </div>
    </div>
  </body>
</html>

PS. для проверки в ' '+parDiv+' ' нужно заменить внешние кавычки на [амперсанд]#39;
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2012, 21:40
Новичок на форуме
Отправить личное сообщение для Pyrex Посмотреть профиль Найти все сообщения от Pyrex
 
Регистрация: 15.05.2012
Сообщений: 3

Разобрался: для таблицы в диве необходимо обязательно прописывать элемент <tbody>, и, соответственно, 5 уровней родительского родства для управления этим дивом.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск