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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск элемента в копии таблицы(cloneNode(true)) 
:(
    Опции темы
444ert666
Дата 29.12.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!
Задача следующая, есть некоторая таблица с множеством вложений, их количество и порядок нам неизвестен, нам известно только ID таблицы. Вся эта таблица должна храниться в переменной. Делаю так:
Код

function savePatternTable(ID)
{
  if(MULTI[ID])
  {
    Counts[ID]=1;
    MULTI[ID]=document.getElementById(ID).cloneNode(true); //сохраняем копию таблицы
  }
}



Далее мне необходимо найти элемент в этой копии(чтобы изменить его), известен только ID элемента, и ID копии таблицы. как можно реализовать такое? причем уровень вложенности элементов в таблице может быть бесконечно велик.

Буду благодарен за любую помощь, намек или подсказкуsmile

Это сообщение отредактировал(а) 444ert666 - 29.12.2008, 13:49
PM MAIL   Вверх
bars80080
Дата 29.12.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



так и ищи это элемент и меняй его, какая связь с id таблицы? он к ней не привязан
PM MAIL WWW   Вверх
444ert666
Дата 29.12.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так поясню подробнее задачи, пытаюсь реализовать механизм размножения таблиц(таблицы различаются). Изначально на странице появляется по одной таблице каждого типа, после загрузки каждой уникальной таблицы запускается savePatternTable('{ID_ROOT_TABLE}') - сохраняем исходное состояние каждой уникальной таблицы(таблицы имеют элементы ввода,которые могут изменятся). ID_ROOT_TABLE - это ID уникальной таблицы, для первой оригинальной таблицы примерно такого вида: CUT_IMAGE[0]..... Теперь нажав плюсик возле какой-то таблички, у нас под ней должна появится ее копия, только все ID в этой копии, должны быть изменится, например для первой копии: CUT_IMAGE[1], IMAGE_WIDTH[1], IMAGE_HEIGHT[1] и тд. 

Дык вот получается такая задача, что сохранив копию уникальной таблицы, для добавления ее экземпляра на страницу, нужно пройтись по сохраненной копии и заменить все ID на другие.

Задача в прицнипе тривилаьная, если точно знаем уровень вложенности элементов в таблицу. Но в моем случае это не так, все таблицы кардинально отличаются друг от друга как по уровню вложенности элементов, так и по их количеству. Едиснтвенное что нам известно, так это массив ID которые мы должны изменить, примерно в таком виде: Array('CUT_IMAGE','IMAGE_WIDTH','IMAGE_HEIGHT'), а также номер последней добавленной на страницу копии таблицы(под которой нажали плюс).

Добавлено через 5 минут и 55 секунд
Кратко говоря алгоритм такой: на старте есть несколько уникальных таблиц, сохраняем их структуру и первоначальные значения элементов ввода в шаблон(MULTI[ID]), далее чтобы создать еще один экземпляр какой-то таблицы, копируем шаблон соответствующий ей, проходим по всем необходимым нам ID в этой копии шаблона и меняем циферку в [] на значение Counts[ID], затем выводим копию шаблона, и прибавляем единицу к Counts[ID]
PM MAIL   Вверх
bars80080
Дата 29.12.2008, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



ну, сходу придумывается только некая рекурсивная функция пробегающая по всем потомкам и проверяющая, есть ли id, если есть то распарсивает и присваивает новый

Добавлено через 1 минуту и 25 секунд
.childNodes самое простое в этом случае. а id сидит прямо в x.id
PM MAIL WWW   Вверх
444ert666
Дата 29.12.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bars80080, 
Хм... чего тоя сразу не подумал о рекурсивной функцииsmile))... спаибо огромное, думаю теперь получитсяsmile
PM MAIL   Вверх
444ert666
Дата 12.1.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый вечер!
Вопрос немного иной направленности, но всеж по этой теме.
Как поменять имя уже созданного элемента в IE?
 Итак вот она функция, которая динамически меняет имена и id всех элементов в копиии таблицы, el - это копия таблицы(со всеми вложениями), а k - просто число.

Код

function changePattern(el,k)
{ 
  var list=el.childNodes;
  var i=0;
  if(list)
  {
    for(i=0;i<list.length;i++)
    {
      if(list[i].id)
      {
        str=list[i].id;
        list[i].id=str.replace(/\[([0-9]+)\]$/,"["+k+"]");
        str=list[i].name;
        if(str) 
        {
          list[i].name=str.replace(/\[([0-9]+)\]$/,"["+k+"]");
        }
      }
      
      changePattern(list[i],k);
    }
  }
  
}


Все работает и все хорошо. За исключением одного "НО", как всегда IE решил выделитсяsmile)))
вот эта строчка:
Код

 list[i].name=str.replace(/\[([0-9]+)\]$/,"["+k+"]");


Не меняет аттрибут name элемента list[i] в IE..... В opera и firefox все отлично,

Где то нарыл, что IE не позволяет менять имя уже созданного элемента. Так как тогда быть именно в моем случае?

Заранее спасибо.
PM MAIL   Вверх
bars80080
Дата 13.1.2009, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



может через .setAttributte('name', 'newname'); попробовать?
PM MAIL WWW   Вверх
444ert666
Дата 13.1.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



пробовал, не работает:((((
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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