Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.01.2010, 23:30
Аватар для Seafnox
Новичок на форуме
Отправить личное сообщение для Seafnox Посмотреть профиль Найти все сообщения от Seafnox
 
Регистрация: 11.01.2010
Сообщений: 2

jQuery jTreeMenu plugin
Итак пару недель назад начал искать плагин для создания древовидного меню на jQuery и столкнулся с возмутившими меня обстоятельствами.. рекомендованный JQuery.MenuTree.js начал выделывать удивительные трюфеля в фф3 и ие6 уже на меню с двумя одноуровневыми подменю, но их идея мне понравилась и я рискнул написать собственный плагин, который БУДЕТ работать везде..
назвал я его
jTreeMenu.js
а вот собственно и сам код
if (jQuery) (function($) {

   $.extend($.fn, {
treeMenu: function(o) {
$(this).find('ul').css({'list-style' : 'none'});
$(this).find('li.parent ul').slideUp(500);
$(this).find('li.parent').removeClass('collapse').removeClass('expand').addClass('collapse').bind("click", sliding);
function sliding()
{
if ($(this).hasClass('collapse'))
{
var obj = $(this).parent();
obj.find('li.parent').removeClass('expand').removeClass('collapse').addClass('collapse');
obj.find('li.parent ul').slideUp(500);
$(this).addClass('expand').removeClass('collapse');
$(this).children('ul').slideDown(500);

}
else
{
$(this).addClass('collapse').removeClass('expand');
$(this).children('ul').slideUp(500);
}
return false;
}
       }
   });

})(jQuery);

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

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

начнем?

ЗЫ если кто то уже сделал такой плагин, либо отыскал в просторах кроссбраузерно рабочий плагин, поддерживающий все ие, оперу, фф и прочее(главное чтобы на jQuery), то поделитесь ссылкой... ато может изобретать велосипед не стоит...

<div id="vsl_menu">
<ul>
<li class="parent"><a href="#">Первое подменю</a>
<ul>
<li class="child">Массаж лица</li>
<li class="child">Мезотерапия</li>
<li class="child">Электрофорез</li>
<li class="child">Визаж</li>
</ul>
</li>
<li class="child">меню 1</li>
<li class="child">меню 2</li>
<li class="child">меню 3</li>
<li class="parent"><a href="#">Второе подменю</a>
<ul>
<li class="child">Обертывание</li>
<li class="child">Ручная методика</li>
<li class="child">Аппаратная метдика</li>
</ul>
</li>
<li class="child">меню 1</li>
<li class="child">меню 1</li>
<li class="child">меню 1</li>
<li class="child">меню 1</li>
<li class="child">меню 1</li>
</ul>
</div>


проверить работу можно на этом меню
не забываем подключать сам jQuery
для активации на реади ставим:

$('#vsl_menu').treeMenu();
Ответить с цитированием
  #2 (permalink)  
Старый 12.01.2010, 00:15
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

ОФФТОП:
О боже как страшно елы палы.
if (jQuery) (function($) {
 
   $.extend($.fn, {
treeMenu: function(o) {
$(this).find('ul').css({'list-style' : 'none'});
$(this).find('li.parent ul').slideUp(500);
$(this).find('li.parent').removeClass('collapse').removeClass('expand').addClass('collapse').bind("click", sliding);
function sliding()
{
if ($(this).hasClass('collapse'))
{
var obj = $(this).parent();
obj.find('li.parent').removeClass('expand').removeClass('collapse').addClass('collapse');
obj.find('li.parent ul').slideUp(500);
$(this).addClass('expand').removeClass('collapse');
$(this).children('ul').slideDown(500);
 
}
else
{
$(this).addClass('collapse').removeClass('expand');
$(this).children('ul').slideUp(500);
}
return false;
}
       }
   });
 
})(jQuery);


вы хоть о производительности думаете хоть когда нибудь? куча туча новых обьектов создаете из одного и тогоже... с одним работать слабо? ах да. я забыл что jQ не умеет сохранять себя же в кеше...

Последний раз редактировалось PeaceCoder, 12.01.2010 в 01:54.
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2010, 00:51
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от PeaceCoder
ах да. я забыл что jQ не умеет сохранять себя же в кеше...
Селекторы не кэшируются, но запомнить ссылку на jQuery-объект с коллекцией ничто не мешает.
Ответить с цитированием
  #4 (permalink)  
Старый 12.01.2010, 01:11
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

ОФФТОП:
Сообщение от Octane
Селекторы не кэшируются, но запомнить ссылку на jQuery-объект с коллекцией ничто не мешает.
в этом то и проблема. надо создавать новый обьект, что бы продолжать юзать текущий. т.к. изначально не продумана механика jQuery. ведь если коллекцию изменить, ссылка будет не действительной сохранению :Р к тому же надо прервать цепочку что оч неудобно.

Последний раз редактировалось PeaceCoder, 12.01.2010 в 01:54.
Ответить с цитированием
  #5 (permalink)  
Старый 12.01.2010, 01:14
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

бред
Ответить с цитированием
  #6 (permalink)  
Старый 12.01.2010, 01:52
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

ОФФТОП:
это не бред. поробуй сделать коллекцию сохранить на нее ссылку. потом например использовать функцию find. а потом например использовать записанную ссылку с якобы сохраненными элементами... что ты получишь? не ту ли коллекцию которую получил после операции find ? а что бы такого небыло надо клонировать коллекцию... а это время... создавать новую коллекцию тоже время... что к стати выше тратится в пустую.
Ответить с цитированием
  #7 (permalink)  
Старый 12.01.2010, 02:02
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

попробуй, прежде чем писать
Ответить с цитированием
  #8 (permalink)  
Старый 12.01.2010, 09:43
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

Сообщение от PeaceCoder Посмотреть сообщение
ОФФТОП:
это не бред. поробуй сделать коллекцию сохранить на нее ссылку. потом например использовать функцию find. а потом например использовать записанную ссылку с якобы сохраненными элементами... что ты получишь? не ту ли коллекцию которую получил после операции find ? а что бы такого небыло надо клонировать коллекцию... а это время... создавать новую коллекцию тоже время... что к стати выше тратится в пустую.
Не совсем понял возмущение. Что не так?
Сохраняешь ссылку на коллекцию.
var k = $('p');
k.filter('#xx'); // k не поменялась
k = k.filter('#xx'); // k поменялась


Если в одной цепочке работать то есть метод отката к предыдущей разрушенной операции - end(). Не знаю правда запоминает jQuery как-то данные для такого отката или все заново.

Последний раз редактировалось micscr, 12.01.2010 в 10:34.
Ответить с цитированием
  #9 (permalink)  
Старый 12.01.2010, 13:36
Аватар для Seafnox
Новичок на форуме
Отправить личное сообщение для Seafnox Посмотреть профиль Найти все сообщения от Seafnox
 
Регистрация: 11.01.2010
Сообщений: 2

Я может чего то не понял в вашей дискуссии, но 1) локальные объекты функции уничтожаются, после завершения функции(как в прочем в любом языке)
2) я верно понял что речь идет о локальной переменной obj?
3) это вообще то даже не тестовая, а бэта версия и obj применялся сугубо для моей наглядности, его можно совсем не использовать

оффтоп - зло... поясняйте мои ошибки на примере моего кода пожалуйста.
Ответить с цитированием
  #10 (permalink)  
Старый 12.01.2010, 21:55
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Сообщение от micscr
Не знаю правда запоминает jQuery как-то данные для такого отката или все заново.
запоминает. походу это функция pushStack. И работает в цепочке с новым обьектом, передавая его далее. jQ уж больно много лишней работы делает. вот о чем я говорю.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery Click() не работает на объекте, созданном Ajax vovabigov jQuery 13 09.09.2012 14:25
jQuery Ajax Rater Plugin и массив POST - Нужна помощь TROODON jQuery 12 30.12.2009 22:44
jquery - Как получить полный путь? kirill.adw jQuery 5 20.11.2009 17:40
JQuery + FireFox NOOB jQuery 4 02.11.2009 18:16
Как правильно подгрузить jQuery Siton jQuery 4 15.06.2009 09:54