Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.04.2009, 10:24
Новичок на форуме
Отправить личное сообщение для fact Посмотреть профиль Найти все сообщения от fact
 
Регистрация: 17.04.2009
Сообщений: 5

Объект при загрузке страницы и после операций над ним
Пишу плагин для работы с деревом сайта.

Объекты $('#elements') и $('#treeview') при загрузке забирают в себя списки #elements и #treeview, после нажатия кнопки cut, элемент li списка #treeview переносится в список '#elements', но объект $('#elements') не воспринимает перенесенный li своим(то есть по нему нельзя кликнуть и выделить).

Вопрос, как переинициализировать объект $('#elements'), чтобы он считал перенесенные li своими?

До нажатия кнопки:
<ul id="treeview">
<li><span>пункт 1</span></li>
<li><span>пункт 2</span>
<ul>
   <li><span>пункт 2.1</span></li>
   <li><span>пункт 2.2</span></li>
   <li><span>пункт 2.3</span></li>
</ul>
</li>
<li><span>пункт 3</span></li>
</ul>


<ul id="elements">
<li><span>пункт 1</span></li>
<li><span>пункт 2</span></li>
<li><span>пункт 3</span></li>
</ul>


После нажатия кнопки:
<ul id="treeview">
<li><span>пункт 1</span></li>
<li><span>пункт 2</span>
<ul>
   <li><span>пункт 2.1</span></li>
   <li><span>пункт 2.3</span></li>
</ul>
</li>
<li><span>пункт 3</span></li>
</ul>


<ul id="elements">
<li><span>пункт 1</span></li>
<li><span>пункт 2</span></li>
<li><span>пункт 3</span></li>
<li><span>пункт 2.2</span></li>
</ul>


(function($) {
	selectNode = function(obj) {
	var foo = $('li>span',obj);
	$(foo).bind('click', function()
	{
			if ($(this).hasClass('selected')) {
				$(this).removeClass('selected');
			}
			else {
				$(obj).find('span').removeClass('selected'),
				$(this).addClass('selected')
			}
	})};
		
	cut = function(){
		$("button[value='cut']").click(function(){
			var selectedSpan = $('#treeview').find('span.selected');
			var currentLi = selectedSpan.parent('li').removeClass();
			currentLi.remove().appendTo('#elements');
		});
	}
	
	$.fn.editTreeView = function() {
			
		cut();
		selectNode ($('#treeview'));
		selectNode ($('#elements'));
};})(jQuery);
Ответить с цитированием
  #2 (permalink)  
Старый 17.04.2009, 16:00
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

1) а remove нужен?
Цитата:
$('#elements') не воспринимает перенесенный li своим(то есть по нему нельзя кликнуть и выделить)
2) так $('#elements') не содержит добавленный li, или по li нельзя кликнуть, или обработчик не срабатывает или его вообще не видно?
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2009, 19:12
Новичок на форуме
Отправить личное сообщение для fact Посмотреть профиль Найти все сообщения от fact
 
Регистрация: 17.04.2009
Сообщений: 5

Сообщение от x-yuri Посмотреть сообщение
1) а remove нужен?
без remove li продолжает пренадлежать объекту $('#treeview')

Сообщение от x-yuri Посмотреть сообщение
2) так $('#elements') не содержит добавленный li, или по li нельзя кликнуть, или обработчик не срабатывает или его вообще не видно?
li добавляется в список #elements, но по нему нельзя кликнуть.

при загрузке страницы объекты $('#elements') и $('#treeview') забирают в себя одноименные списки и не обновляются после нажатия кнопки, то есть переносимый li добавляется в список #elements и его видно, но объект $('#elements') содержит те же самые li которые получил при загрузке страницы.
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2009, 19:54
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а ты сохраняешь этот объект ($('#elements')) и дальше пытаешься его использовать? В этом случае, естественно, в нем ничего не меняется. Он содержит набор элементов и не меняется, пока ты ему об этом не скажешь. Чтобы получить новый список элементов еще раз пишешь $('#elements')
Ответить с цитированием
  #5 (permalink)  
Старый 17.04.2009, 20:42
Новичок на форуме
Отправить личное сообщение для fact Посмотреть профиль Найти все сообщения от fact
 
Регистрация: 17.04.2009
Сообщений: 5

Сообщение от x-yuri Посмотреть сообщение
а ты сохраняешь этот объект ($('#elements')) и дальше пытаешься его использовать? В этом случае, естественно, в нем ничего не меняется.
не совсем понял что ты имеешь ввиду...

Сообщение от x-yuri Посмотреть сообщение
Чтобы получить новый список элементов еще раз пишешь $('#elements')
в том то и дело, что не понимаю как его переинициализировать и куда написать?

На всякий случай прикрепил код.
Вложения:
Тип файла: zip plugin.zip (22.4 Кб, 2 просмотров)
Ответить с цитированием
  #6 (permalink)  
Старый 17.04.2009, 21:29
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а-а, так у тебя по идее просто обработчик "теряется" при перемещении. Поищи на сайте jQuery event delegation (когда обработчики назначаются не конкретным элементам, а селекторам)
p.s. у тебя cut - глобальная переменная, если хочешь сделать локальную (внутреннюю) функцию, пиши так:
function f1() {
    ...
    f2();
    ...
    function f2() {

        ...
    }
}
Ответить с цитированием
  #7 (permalink)  
Старый 17.04.2009, 21:57
Новичок на форуме
Отправить личное сообщение для fact Посмотреть профиль Найти все сообщения от fact
 
Регистрация: 17.04.2009
Сообщений: 5

Сообщение от x-yuri Посмотреть сообщение
а-а, так у тебя по идее просто обработчик "теряется" при перемещении. Поищи на сайте jQuery event delegation (когда обработчики назначаются не конкретным элементам, а селекторам)
p.s. у тебя cut - глобальная переменная, если хочешь сделать локальную (внутреннюю) функцию, пиши так:
function f1() {
    ...
    f2();
    ...
    function f2() {

        ...
    }
}
спасибо, посмотрю...
Ответить с цитированием
  #8 (permalink)  
Старый 20.04.2009, 22:02
Новичок на форуме
Отправить личное сообщение для fact Посмотреть профиль Найти все сообщения от fact
 
Регистрация: 17.04.2009
Сообщений: 5

x-yuri,
Event delegation - то, что надо! Проблема решена, еще раз спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срабатывание скрипта при загрузке страницы bormax Общие вопросы Javascript 3 03.04.2008 09:57