Форум hotibo.ru

Сайты - по стандартам, но не стандартные сайты!






#1 15.06.2010 10:23

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Закрытие всех слоев DIV, составляющих меню

Проблема следующая:
некто пользователь щелчком по иконке раскрывал все пункты, составляющие меню, в поисках нужной темы. Найдя искомую, он щелкает по ее наименованию. При этом должны закрыться все слои, составляющие меню, за исключением ветки, к которой относится искомый пункт. Меню делается в XML, но этот кусок, описывающий каждый пункт, читабелен. Если будет что-то не понятно, я упрощу или сделаю в чистом HTML. Итак:
---------------------------------------------------------------------------------------------------
     // шаблон для не раскрывающегося пункта
 
 


   

   
     
     
     
       
     

     

     
     
     

   

 

 


    // шаблон для раскрывающегося пункта
 
 

   

   
   
     
       
       
     

     

     
     
     

   

   

   
   

 

 


---------------------------------------------------------------------------------------------------------------
Скрипт switchNode() на данный момент выглядит так:
---------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------
У меня была мысль сделать массив, в котором отражать все посещенные ссылки .... Но мне показалось, что это будет выглядеть как-то коряво. Кроме того, будет сложно составить цепочку (ветку). Не подскажете как это можно сделать по-лучше ???

Нет на форуме

 

#2 15.06.2010 11:35

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Мне показалось, что на Xpoint Вы пришли к решению этой проблемы. Но, как бы то ни было, вот ссылка /forum/viewtopic.php?id=136&p=1, здесь мы решали нечто подобное и Вам те решения могут оказаться полезными. Посмотрите, затем продолжим обсуждение...
И еще кое-что. Лично мне профессионалы рекомендовали в таких случаях использовать либо список определений, либо маркированный список - т.е. логичную разметку.

Нет на форуме

 

#3 15.06.2010 13:07

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

AKS написал:

mdi
Мне показалось, что на Xpoint Вы пришли к решению этой проблемы. Но, как бы то ни было, вот ссылка /forum/viewtopic.php?id=136&p=1, здесь мы решали нечто подобное и Вам те решения могут оказаться полезными. Посмотрите, затем продолжим обсуждение...
И еще кое-что. Лично мне профессионалы рекомендовали в таких случаях использовать либо список определений, либо маркированный список - т.е. логичную разметку.

Извините меня за мою серость:
что Вы называете "списком определений" ? С маркированным списком у меня, вроде бы, все в порядке.
Это, если не ошибаюсь:


  • ...


    • ......

Нет на форуме

 

#4 15.06.2010 13:27

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Извиняюсь. Слишком рано сознался в серости .... Список определений:


...... - название термина
..... - определение термина
.............

Нет на форуме

 

#5 15.06.2010 14:13

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
А ссылка Вам помогла хоть как-то? Там ведь сценарий, предложенный Wizard , как раз выполняет то, что Вам нужно...

Нет на форуме

 

#6 15.06.2010 15:29

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Я пока чешу репу как извернуться .... Дело в том, что, как Вы могли видеть, у меня меню построено на DIV. Я пробовал использовать вызов "getElementsByTagName("div")", - глухо: выдавалось 0-элементов.
Я манипулировал с parentNode, - безрезультатно .... При этом: "getElementsByTagName("img")" работает без сучка и задоринки. К чему бы это ???

Нет на форуме

 

#7 15.06.2010 15:34

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Давайте разберемся - Вы не хотите делать список из соответствующих тэгов? В любом случае выкладывайте код (x)html (для того, чтобы легче было представить Ваш список) и начнем все с самого начала...

Нет на форуме

 

#8 16.06.2010 10:36

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Я приведу выдержки из XSL-таблица, чтобы не загромаждать место (честно говоря, я их уже приводил в начале переписки; может быть Вам нужна XSL-таблица полностью?). Итак:
Скрипт:
---------------------------------------------------------------------------------------------------------------------
   
--------------------------------------------------------------------------------------------------------------------
Шаблон, выполняющий формирование страницы:
--------------------------------------------------------------------------------------------------------------------

 
 


   

   
   
     
       
       
     

     

     
     
     

   

   

   
   

 

 


---------------------------------------------------------------------------------------------------------------
На всякий случай, кусок XML-файла:
---------------------------------------------------------------------------------------------------------------





................................................................................

Нет на форуме

 

#9 16.06.2010 12:20

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Мне не нужна XSL-таблица полностью. Вы писали:

Если будет что-то не понятно, я упрощу или сделаю в чистом HTML.

Вот я и попросил чистый HTML, с которым и придется иметь javascript'у дело. Сами понимаете - зачем мне разбираться с тем, что не имеет к javascript никакого отношения.

Нет на форуме

 

#10 16.06.2010 14:06

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Прошу прощения за размер файла: это преобразование средствами браузера. Итак, крепитесь:
-------------------------------------------------------------------------------------------------------------------


 
   VS
   
   
   
   
    VS
   
     


     
     

       

       

         
         

         

           

           

             
             
             

             1_1_1
           

           

         

         
           

           

             
             
             

             1_1_2
           

           

         

         

       

       
       
       

         

         
           
         

         
           Выпуски VS
         

         

       

       

       
       

         

         
           
         

         
           Авторские права
         

         

       

       

       
       

         
         

         

           

           

             
             
             

             1_4_1
           

           

         

         
           

           

             
             
             

             1_4_2
           

           

         

         

       

       
     

     

   
   
     

     
     

     

   

   
     

     
     

     

   

   
   
   

   
   

     
     

   

   

   
   

     
     

   

   


Нет на форуме

 

#11 16.06.2010 14:55

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Вот теперь можно приступать. Вы знаете, там в каждом пункте идет сначала ссылка с картинкой, потом ссылка с текстом. Может, и картинку, и текст поставить в одну ссылку? Так было бы проще. Я пока начну копаться, а Вы подумайте над моим предложением по-поводу ссылок..

Нет на форуме

 

#12 16.06.2010 15:11

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Там ведь не нужно открывать новое окно, когда нужно закрыть доп. список?
Я так понимаю, что метод window.open нужно убрать в функцию switchNode, чтобы из нее управлять открытием новых окон. Все я правильно понял? Ведь, зачем открывающееся окно, когда список закрывается?

Нет на форуме

 

#13 16.06.2010 15:34

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

AKS написал:

mdi
Может, и картинку, и текст поставить в одну ссылку? Так было бы проще. Я пока начну копаться, а Вы подумайте над моим предложением по-поводу ссылок..

Я бы, честно говоря, так не делал: дело в том, что при выборе иконки, дерево директорий просто раскрывается, а при выборе наименования происходит нетолько раскрытие слоя, но и вывод в правый "фрейм" нужной страницы. Кроме того, такое разграничение, вроде бы, упрощает функцию ....???

Нет на форуме

 

#14 16.06.2010 15:35

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
А по-поводу window.open? Убираю в switchNode в ту ветвь, где открытие? При закрытии будет только закрытие, так?

Нет на форуме

 

#15 16.06.2010 15:40

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

AKS написал:

mdi
Там ведь не нужно открывать новое окно, когда нужно закрыть доп. список?

Да.

AKS написал:

mdi
Я так понимаю, что метод window.open нужно убрать в функцию switchNode, чтобы из нее управлять открытием новых окон. Все я правильно понял? Ведь, зачем открывающееся окно, когда список закрывается

Я, впринципе, с Вами согласен !!!

Нет на форуме

 

#16 16.06.2010 15:41

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

AKS написал:

mdi
А по-поводу window.open? Убираю в switchNode в ту ветвь, где открытие? При закрытии будет только закрытие, так?

Пожалуй Вы - правы.

Нет на форуме

 

#17 16.06.2010 15:44

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
И еще один момент. Когда открываются Новые возможности VS - появляется 1_1_1 и т.д. Когда открываюся Установка и настройка , то
Новые возможности VS должны прятать свое 1_1_1 и т.д. Так?

Нет на форуме

 

#18 16.06.2010 15:52

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Мысли у меня были следующие:
1. при открытии просто дерева, - открывай сколько хочешь: ведь идет поиск темы;
2. при выборе наименования закрываются все ветки дерева, кроме ветки, в конце которой находится выбранный пункт; Грубо говоря остается открытой ветка от "корня" до выбранного пункта.
При этом, если выбранный пункт, - раскрывающийся, то, скорее всего, он, - раскрыт ... Так вот: он раскрытым и должен остаться.
Вроде бы - так ...

Отредактированно mdi (16.06.2010 15:54)

Нет на форуме

 

#19 16.06.2010 16:06

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Пока не понял, ну да ладно, разберемся после. Сначала сделаю, чтобы все открывалось, минут через 30 выложу, OK?

Нет на форуме

 

#20 16.06.2010 16:10

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Меня через час-1.5 выгонят, но пока я в Вашем распоряжении ....

Нет на форуме

 

#21 16.06.2010 16:11

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Куда? За что?

Нет на форуме

 

#22 16.06.2010 16:30

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Да не нервничайте Вы так: у нас на рабочем месте можно быть только до определенного времени. Потом - выгоняют всех. Нетолько меня и опечатывают.

Нет на форуме

 

#23 16.06.2010 16:49

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Итак, вот функция:

Код:

function switchNode(oTarget, aWinParams) {
    if(oTarget) {
        var oList = oTarget.parentNode.parentNode.getElementsByTagName("div")[1];
        var oImg = oTarget.parentNode.getElementsByTagName("img")[0];
        if(oList.className == "nodeChildrenOpen") {
            oImg.src = "images/plus.gif";
            oList.className = "nodeChildrenHidden";
        }
        else {
            oImg.src = "images/minus.gif";
            oList.className = "nodeChildrenOpen";
            if(aWinParams) {
                open(aWinParams[0], aWinParams[1]);
            }
        }
    }
    else { open(aWinParams[0], aWinParams[1]); }
}

Как Вы должны заметить, нет обращений к св-вам nextSibling и previousSibling - не работает в FF && Opera.
Как применить функцию:
1. Там, где ссылка с картинкой - switchNode(this);return false
2. Там, где ссылка с текстом - switchNode(this, ["1a.files/%72ightframe.files/VS.htm", "fraContent"]); return false; - в массиве передаем параметры для нового окна.
3. Там, где у Вас был просто вызов, открывающий окно - switchNode(false, ["1/2.files/%72ightframe.files/VSE.htm", "fraContent"]); return false;

Нет на форуме

 

#24 16.06.2010 16:53

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Там путь для картинок я на свой менял, Вы меняйте на свой...

Нет на форуме

 

#25 16.06.2010 16:57

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Если Вы под FF понимаете FireFox, то у меня к Вам вопрос:
а почему у меня nextSibling в FF работает ???

Нет на форуме

 

#26 16.06.2010 16:59

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Ну можно поменять. Сейчас, минуточку, покажу как и на что...

Нет на форуме

 

#27 16.06.2010 17:04

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

AKS написал:

mdi
3. Там, где у Вас был просто вызов, открывающий окно - switchNode(false, ["1/2.files/%72ightframe.files/VSE.htm", "fraContent"]); return false;

Вы имеете ввиду щелчок по нераскрывающемуся пункту меню ?

Нет на форуме

 

#28 16.06.2010 17:04

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi

Код:

    var oList = oTarget.parentNode.nextSibling;
    var oImg = (oTarget.firstChild.tagName.toLowerCase() == "img") ? oTarget.firstChild : oTarget.previousSibling.firstChild;

Сами знаете, вместо чего...

Нет на форуме

 

#29 16.06.2010 17:06

AKS
Опытный
Зарегистрирован: 25.12.2009
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Да, щелчок по нераскрывающемуся пункту, где у Вас был просто window.open();

Нет на форуме

 

#30 16.06.2010 17:08

mdi
Разбирающийся
Зарегистрирован: 15.06.2010
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Спасибо. Въехал ...

Нет на форуме

 

Board footer