Плагин jquery TreeView меняет поведение ссылки (избегайте схлопывания)
-
23-09-2019 - |
Вопрос
Я использую плагин jQuery Treeview.Взгляните на «Пример 1 — по умолчанию», представленный на демонстрационной странице плагина. http://jquery.bassistance.de/treeview/demo/.В моем случае все папки и файлы являются ссылками.Если я нажму, например, на развернутую «Папку 2», она сначала свернется, а затем перейдет к местоположению ссылки.Я хотел бы, чтобы сначала расширялись только свернутые объекты, а если они уже расширились, то останутся такими.
Код в плагине (jquery.treeview.js), который переключает поведение, следующий:
66 this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event) {
67 toggler.apply($(this).next());
68 }).add( $("a", this) ).hoverClass();
Я уже разобрался, как получить все ссылки, которые следует изменить:
$('a').parent().parent().filter('.collapsable')
Результатом будет массив всех элементов li, которые в данный момент можно свернуть (развернуть):[ли., ли.складной]
Но я не знаю, как действовать дальше :-( Надеюсь, кто-нибудь сможет мне помочь...
Я уже успешно изменил поведение ссылки для текущей выбранной ссылки (класс = выбранный) с помощью этого кода:
$(".current").click(function(e){
e.preventDefault();
});
Спасибо заранее!
Нет правильного решения
Другие советы
возможно, было неясно, что я на самом деле хочу сделать, поэтому в следующий раз постараюсь улучшить свою вербализации ;-)
Ответ на мой собственный вопрос:
$('li').filter('.collapsable').find('a:first:not(.current)').click(function(e){
e.stopImmediatePropagation();
});
Возможно, это поможет кому-то, кто ищет что-то подобное.
С наилучшими пожеланиями!!
ОБНОВЛЕНИЕ (опубликованное выше решение не работает, если пользователь расширил узел без перезагрузки страницы после этого)
$('a').click(function(e){
if ($(this).is('.current')) {
e.preventDefault();
} else if ($(this).parent().parent().is('.collapsable')) {
e.stopImmediatePropagation();
};
});
Этот работает так, как должен.:-)