30.09.2010, 18:40
|
Интересующийся
|
|
Регистрация: 30.09.2010
Сообщений: 20
|
|
Jquery.treeview Проблема с навигацией
Добрый день!
Делаю сайт для работы, нужна помощь.
Мне необходимо, чтобы древовидное меню в левой части сайта все время было на виду, как основной элемент навигации по каталогу.
В общем то, все здорово, кроме одного. Когда кликаешь на ссылке на самой страничке, например чтобы открыть более подробное описание позиции каталога, дерево схлопывается!
Мне же надо, чтобы оно не реагировало на другие ссылки, а оставалось открытым так, как его оставили.
Как я понял, это дерево смотрит на адрес странички, и если находит совпадение в себе, то открывает соответствующую ветку:
case "location":
var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase(); });
if ( current.length ) {
current.addClass("selected").parents("ul, li").add( current.next() ).show();
}
Я в яве не силен, поэтому переделывать код сложно. Я хочу попробовать "обмануть" скрипт, подсовывая ему (скажем средствами php или небольшим ява-скриптом) на определенных страницах нужный "адрес", чтобы дерево не закрывалось.
Как это можно сделать?
Может, можно как-то ему напрямую задать эту this.href.toLowerCase() ?
Например, вставить дополнительные скрипт на конечные страницы вроде
IF (адрес = страница такая-то) то this.href = такой-то
?
P.S. Если ставлю в настройках не location a cookie, то дерево вообще не работает.
|
|
30.09.2010, 18:51
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
скрипт обмануть нельзя. Ява, это что за язык?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
30.09.2010, 18:57
|
Интересующийся
|
|
Регистрация: 30.09.2010
Сообщений: 20
|
|
Ну не обмануть в прямом смысле этого слова, а подсунуть ему то, что нужно мне, а не что он берет сам, в данном случае адрес страницы.
Ява, я имел ввиду яваскрипт конечно.
|
|
30.09.2010, 19:03
|
Интересующийся
|
|
Регистрация: 30.09.2010
Сообщений: 20
|
|
Я даже упрощу: как бы сделать так, чтобы скрипт обращал внимание не на весь адрес, а только на его часть? А скажем на 10 последних символов в строке адреса внимания не обращал.
Вот что я пока придумал: добавил в вышеприведенный код функцию замены строки .split("/ddd").join("")
Теперь, если добавить к страничке "/ddd" дерево остается открытым!!
Теперь как бы сделать так, чтобы неважно было, что стоит после слеша...
Последний раз редактировалось Greider, 30.09.2010 в 19:13.
|
|
30.09.2010, 19:44
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
регулярные выражения метод test к примеру
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
01.10.2010, 11:18
|
Интересующийся
|
|
Регистрация: 30.09.2010
Сообщений: 20
|
|
А вот как туда вместо конкретной строки регулярное выражение всунуть, не догоняю.. по-разному пробовал - не получается.
Вот например, так -
var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase().replace("/www", ""); });
и если прибавить к адресу старнички /www то все работает как надо.
А есил делаю так -
var reg=/[a-z][a-z][a-z]/;
var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase().replace(reg, ""); });
То если добавить к адресу скажем www (со слешем потом разберусь) - то нужно эффекта нет, более того, дерево вообще на адрес не реагирует, даже если оставить его как есть.
Что не так?.. Помогите, немного осталось...
Последний раз редактировалось Greider, 01.10.2010 в 12:24.
|
|
01.10.2010, 12:31
|
Интересующийся
|
|
Регистрация: 30.09.2010
Сообщений: 20
|
|
А! забыл конец строки указать! )))
|
|
13.02.2011, 06:49
|
Новичок на форуме
|
|
Регистрация: 13.02.2011
Сообщений: 4
|
|
У меня точно такой же случай, никак не могу разобраться.
Напишите, пожалуйста, точно что дописать (исправить) в данной секции js кода (var current....).
|
|
13.02.2011, 12:33
|
Новичок на форуме
|
|
Регистрация: 13.02.2011
Сообщений: 4
|
|
как составить регулярные выражения
Дополню вопрос, напишу задачу подробней.
Пытаюсь использовать меню-дерево (Treeview 1.4.1 - jQuery plugin), как выше писал участник Greider. Столкнулся с проблемой раскрытия ветвей (пунктов меню-дерева) по текущему открытому URL в браузере.
Проблема в том, что если ссылки на страницу нету этом меню-дереве, то оно не раскроется. Требуется, чтобы оно все же раскрывалось при совпадении только части URL.
Например, ссылка в меню-дереве сделана на /razdel/straniza1/. При открытии site.ru/razdel/straniza1/ меню раскрывается нормально.
Но нужно, чтобы при открытии
site.ru/razdel/straniza1/podstraniza1-2/ также меню было раскрытым, как и на предыдущей странице.
Т.е. сделать что-то типа сравнения, если в URL после razdel/ идет более 1-го слэша (straniza1/), то очищать эту подстроку (podstraniza1-2/).
Помогите, пожалуйста, написать правильный код.
+дополнительная задача - если в адресной строке появляется hash (/razdel/straniza1/#str123), то при раскрытии ветви меню-дерева игнорировать эту часть URL (чтобы как будто /razdel/straniza1/).
В этом плагине используется следующая конструкция
(...) case "location":
var current = this.find("a").filter(function() {
return this.href.toLowerCase() == location.href.toLowerCase();
});
if ( current.length ) { (...)
Как правильно составить регулярное(ые) выражение, и его применить (в каком месте кода вставить), чтобы срабатывало, как описано выше?
P.S. Для тех, кто будет читать и не разобрался - использование cookie в наших случаях не работает, т.к., как я где-то вычитал, cookie в javascript сохраняются для каждого URL свои и изменить это нельзя (Этот вариант можно было бы использовать, если бы URL не менялся, например, меняя контент отправкой POST-запроса).
|
|
13.02.2011, 14:28
|
Новичок на форуме
|
|
Регистрация: 13.02.2011
Сообщений: 4
|
|
Нашел тут частичное решение:
(...) case "location":
var current_location = location.href.toLowerCase();
var current_base = current_location.split('/').slice(0,5).join('/')+'/';
var current = this.find("a").filter(function() { return this.href.toLowerCase() == current_base; });
if ( current.length ) { (...)
Но не пойму, как работает =( (что такое split, slice, join)...
так.. в справочнике почитал про эти методы строки, но не понял в какой последовательности они в этом примере вызываются, по идее - слева направо и первый метод split('/') должен разбить адрес http://site.ru/razdel/straniza1/podstraniza1-2/
на массив ["http:", "", "site.ru", "razdel", "straniza1", "podstraniza1-2"], я правильно понял, и что происходит дальше с этим массивом? - просто slice обрезает не символы строки, а элементы массива? (было бы хорошо, если бы в разделе slice был тогда пример и с массивом, если я правильно понял :-) .
По факту оказалось, что slice(0,5) в этой комбинации обрезает, все, что дальше 4-го слэша (5-1).
Т.е. из http://site.ru/razdel/straniza1/podstraniza1-2/ обрежет все справа после straniza1.
В общем, рабочий пример - с хэшем работает также - происходит обрезка после straniza1 (в конце добавляется '/').
Последний раз редактировалось Rossi25, 13.02.2011 в 15:31.
|
|
|
|