После клонирования по id обращение к элементам клона

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

Модераторы: TRAHOMOTO, zandroid, tuareg

После клонирования по id обращение к элементам клона

Сообщение mirek » 06 июн 2012, 19:18

После клонирования по id происходит обращение к элементам клона, а не родителя

Код: выделить все
$("#div_id").clone(true).appendTo("#clone1").attr("id", "Clone1");


А мне нужно в клоне только сохранить оригинал.

При том я даже изменяю id главного элемента как видно из строки

Что не так ? Или так и должно быть ?


Может необходимо изменять id всех подэлементов клона ?

А не предусмотрена ли в JQuery возможность копирования ?
mirek
 
Сообщений: 15
Зарегистрирован: 26 май 2012, 21:12

Re: После клонирования по id обращение к элементам клона

Сообщение tuareg » 06 июн 2012, 22:24

Здравствуйте !!! это Раз
Два id элемента должен быть один всегда
Три Посмотрите пример использования appendTo http://jquery.page2page.ru/index.php5/%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%B3%D0%BE_%D0%B2_%D0%BA%D0%BE%D0%BD%D0%B5%D1%86_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2
четыре
Код: выделить все
$("#div_id").//выбрать эл с id="div_id"
clone(true). // клонировать его и все обработчики
appendTo("#clone1").//см.3  клонированный элемент вставить в элемент с id="clone1" где этот элемент  :?
attr("id", "Clone1") // поменять id у клонированного элемента на clone1 А мы нашли его ...( но уже поздно  :( )

Вот так вот.
P.S В данном случае лучше использовать класс. А id записывать если он нужно через data('id','значение')
P.S.S вот посмотрите я накидал примерчик http://jsfiddle.net/tuareg/hQmsu/
tuareg
Модератор
 
Сообщений: 359
Зарегистрирован: 24 ноя 2010, 00:44

Re: После клонирования по id обращение к элементам клона

Сообщение mirek » 07 июн 2012, 01:06

Огромное Вам спасибо!

Это как раз именно то, что искал.

Я скопировал Ваш пример и опробовал у себя.
Код: выделить все
$('#result').children().each(function(){
      $('#result').append(this.id+'--->');
    })   

Оказалось, что children.each(function не обходит все дерево DOM в моем блоке заключенном в DIV

А id изменяется на ---> только во втором под DIV моего дерева DOM. Плюс к этому копируется еще 5 вложенных элементов но уже со своими оригинальными ID. А остальные элементы, которых более 10-и просто не копируются вообще почему-то.

Наверное проблема в ф-ции обхода дерева DOM
mirek
 
Сообщений: 15
Зарегистрирован: 26 май 2012, 21:12

Re: После клонирования по id обращение к элементам клона

Сообщение mirek » 07 июн 2012, 01:16

С обходом всего дерева удалось разобраться.

Это была моя вина. А вот почему не изменяются все id пока не знаю
mirek
 
Сообщений: 15
Зарегистрирован: 26 май 2012, 21:12

Re: После клонирования по id обращение к элементам клона

Сообщение tuareg » 07 июн 2012, 07:51

Ну почитайте про селекторы....
children() обходит только детей!!! А не потомков детей
http://jquery.page2page.ru/index.php5/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B4%D0%BE%D1%87%D0%B5%D1%80%D0%BD%D0%B8%D1%85_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2
Я еще раз Вам настоятельно рекомендую!!! использовать класс вместо id
tuareg
Модератор
 
Сообщений: 359
Зарегистрирован: 24 ноя 2010, 00:44

Re: После клонирования по id обращение к элементам клона

Сообщение mirek » 07 июн 2012, 09:04

Спасибо. Я уже сам раскопал, что children обходит только прямых потомков.

Даже нашел интересную ф-цию, которая обходит все деррево

Код: выделить все
function traverse(elem){
       jQuery(document).ready(function($) {
  $(elem).children().each(function(i,e){
console.log($(e).append(this.id+='->'));
    traverse($(e));
  });
});
}

Она изменяет ID всех элементов дерева. Но помимо того она еще закрывает все теги.
При чем закрывает даже тег <img :) вот так </img> И между тегами добавляет новый ID

Ее можно как то поправить ?

Вот эта строка это делает
Код: выделить все
console.log($(e).append(this.id+='->'));
mirek
 
Сообщений: 15
Зарегистрирован: 26 май 2012, 21:12

Re: После клонирования по id обращение к элементам клона

Сообщение mirek » 07 июн 2012, 11:12

Уже тоже разобрался
Достаточно использовать $("#clone").find("*")
mirek
 
Сообщений: 15
Зарегистрирован: 26 май 2012, 21:12

Re: После клонирования по id обращение к элементам клона

Сообщение mirek » 07 июн 2012, 16:25

Вообще мне надо, что-бы такие возможности jquery ui как resizable сохранились после того как DOM будет восстановлен из клона

Но пока у меня это не получается

Общая схема алгоритма вообще такая. Объект сохраняется в клон

А оригинал стирается для того, что-б "холст" стал пригоден для работы

Но если необходимо восстановить прежнюю работу то "холст" восстанавливается из клона

Так вот на восстановленом таким образом холсте не работают такие возможности jquery ui как resizable draggable (перетаскивание) и т.д. Другие же возможности не зависящие от jquery ui. Это навешанные мною события сохранились и работают

Но мне надо, что-бы такие возможности jquery ui как resizable draggable восстанавливались тоже

Хотя сейчас у меня все верно восстановлено с восстановлением всех оригинальных id

Смотрел исходный код до и после восстановления из клона

Получается 1 в 1
mirek
 
Сообщений: 15
Зарегистрирован: 26 май 2012, 21:12


Вернуться в API jQuery

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4