Простое древовидное меню на основе списков

Дата публикации: Август 26, 2010 - 18:31:30, чт

Вашему вниманию представляю реализацию простого древовидного меню на основе списков html и JavaScript (кликните!).

Исходный код:

  1. var treeMenu = new Object();
  2.  
  3. /* метод построения меню, в качестве treeId передаем
  4. id корневого ul-а */
  5. treeMenu.buildTree = function(treeId)
  6. {
  7.     // получаем список всех ul-ов
  8.     var ulList = document.getElementById(treeId).getElementsByTagName('ul');
  9.     for (var i = 0; i < ulList.length; i++)
  10.     {
  11.         // и собственно обрабатываем их
  12.         treeMenu.buildSubTree(treeId, ulList[i], i);
  13.     }
  14. }
  15. treeMenu.buildSubTree = function(treeId, ulElement, index)
  16. {
  17.     // в качестве статуса закрыто/открыто используем rel
  18.     ulElement.parentNode.className = "submenu";
  19.     ulElement.setAttribute('rel', 'closed');
  20.     ulElement.style.display = 'none';
  21.     // а это обработчик клика по li, в котором есть ul
  22.     ulElement.parentNode.onclick = function(e)
  23.     {
  24.         var subMenu = this.getElementsByTagName('ul')[0];
  25.         if (subMenu.getAttribute('rel') == 'closed')
  26.         {
  27.             subMenu.style.display = 'block';
  28.             subMenu.setAttribute('rel', 'open');
  29.         }
  30.         else
  31.         {
  32.             subMenu.style.display = 'none';
  33.             subMenu.setAttribute('rel', 'closed');
  34.         }
  35.         treeMenu.preventPropagation(e);
  36.     }
  37.     ulElement.onclick = function(e)
  38.     {
  39.         treeMenu.preventPropagation(e);
  40.     }
  41. }
  42. /* метод предотвращает дальнейшее всплытие события вверх по
  43. иерархии DOM */
  44. treeMenu.preventPropagation = function(e)
  45. {
  46.     if (typeof e != "undefined")
  47.     {
  48.         e.stopPropagation();
  49.     }
  50.     else
  51.     {
  52.         event.cancelBubble = true;
  53.     }
  54. }

Пример:

  1. <ul id="menu">
  2. <li>Меню 1
  3.   <ul>
  4.     <li>Меню 1.1</li>
  5.     <li>Меню 1.2
  6.       <ul>
  7.         <li>Меню 1.2.1</li>
  8.       </ul>
  9.     </li>
  10.   </ul>
  11. </li>
  12. <li>Меню 2
  13.   <ul>
  14.     <li>Меню 2.1</li>
  15.     <li>Меню 2.2
  16.       <ul>
  17.         <li>Меню 2.2.1</li>
  18.       </ul>
  19.     </li>
  20.   </ul>
  21. </li>
  22. <li>Меню 3</li>
  23. </ul>
  24.  
  25. <script type="text/javascript">treeMenu.buildTree('menu');</script>

p. s. Начал делать для себя в качестве замены для JQuery'овской менюхи.

Теги: javascript кодинг
Просмотров: 1034

Комментарии

le chat
Декабрь 7, 2010 - 15:33:04, вт
Спасибо, оч пригодилось ))
User
Март 17, 2011 - 08:56:33, чт
Спасибо огромное)

Что скажете?

Имя:
Код Код с картинки: