Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.09.2010, 18:40
Интересующийся
Отправить личное сообщение для Greider Посмотреть профиль Найти все сообщения от Greider
 
Регистрация: 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, то дерево вообще не работает.
Ответить с цитированием
  #2 (permalink)  
Старый 30.09.2010, 18:51
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

скрипт обмануть нельзя. Ява, это что за язык?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #3 (permalink)  
Старый 30.09.2010, 18:57
Интересующийся
Отправить личное сообщение для Greider Посмотреть профиль Найти все сообщения от Greider
 
Регистрация: 30.09.2010
Сообщений: 20

Ну не обмануть в прямом смысле этого слова, а подсунуть ему то, что нужно мне, а не что он берет сам, в данном случае адрес страницы.
Ява, я имел ввиду яваскрипт конечно.
Ответить с цитированием
  #4 (permalink)  
Старый 30.09.2010, 19:03
Интересующийся
Отправить личное сообщение для Greider Посмотреть профиль Найти все сообщения от Greider
 
Регистрация: 30.09.2010
Сообщений: 20

Я даже упрощу: как бы сделать так, чтобы скрипт обращал внимание не на весь адрес, а только на его часть? А скажем на 10 последних символов в строке адреса внимания не обращал.


Вот что я пока придумал: добавил в вышеприведенный код функцию замены строки .split("/ddd").join("")

Теперь, если добавить к страничке "/ddd" дерево остается открытым!!

Теперь как бы сделать так, чтобы неважно было, что стоит после слеша...

Последний раз редактировалось Greider, 30.09.2010 в 19:13.
Ответить с цитированием
  #5 (permalink)  
Старый 30.09.2010, 19:44
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

регулярные выражения метод test к примеру
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #6 (permalink)  
Старый 01.10.2010, 11:18
Интересующийся
Отправить личное сообщение для Greider Посмотреть профиль Найти все сообщения от Greider
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 01.10.2010, 12:31
Интересующийся
Отправить личное сообщение для Greider Посмотреть профиль Найти все сообщения от Greider
 
Регистрация: 30.09.2010
Сообщений: 20

А! забыл конец строки указать! )))
Ответить с цитированием
  #8 (permalink)  
Старый 13.02.2011, 06:49
Новичок на форуме
Отправить личное сообщение для Rossi25 Посмотреть профиль Найти все сообщения от Rossi25
 
Регистрация: 13.02.2011
Сообщений: 4

У меня точно такой же случай, никак не могу разобраться.
Напишите, пожалуйста, точно что дописать (исправить) в данной секции js кода (var current....).
Ответить с цитированием
  #9 (permalink)  
Старый 13.02.2011, 12:33
Новичок на форуме
Отправить личное сообщение для Rossi25 Посмотреть профиль Найти все сообщения от Rossi25
 
Регистрация: 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-запроса).
Ответить с цитированием
  #10 (permalink)  
Старый 13.02.2011, 14:28
Новичок на форуме
Отправить личное сообщение для Rossi25 Посмотреть профиль Найти все сообщения от Rossi25
 
Регистрация: 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.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47