Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с древовыдным меню
 
 автор: bibika   (15.11.2009 в 08:32)   письмо автору
 
 

Народ пожалуйста помогите с древовыдным меню, перебрал множество вариантов создания этих меню, пока остановился на этом варианте. Все хорошо но есть одно но нужно добавить функционал открыть / закрыть все. Уже неделю ломаю голову, в JS я не силен так что не получается нифига. Кусок кода привожу ниже


<html>
<head>
<style type="text/css">
    .ls { margin-left: 16px; }
   .lsbg { margin-left: 16px; background: url(/article/dot.gif) repeat-y bottom left; }
   a.mi { font: 16px tahoma; color: #000; text-decoration: none; cursor: pointer; }
   a.miact { font: bold 16px tahoma; color: #000; text-decoration: none; cursor: pointer}
   img.ico { width: 32px; height: 16px; margin-right: 5px;}
   </style>
</head>
<body>
<script type="text/javascript">
var active = null;

function addItem(oid, text, pid, url)
   {
   pid = document.getElementById(pid);
   if (pid.getElementsByTagName("span").length == 0) pid = createTag("span", pid);
   else pid = pid.getElementsByTagName("span")[0];

   mi = createTag("div", pid);
   mi.id = oid;

   miImg = createTag("img", mi);
   miImg.align = "absbottom";
   miImg.className = "ico";

   mia = createTag("a", mi);
   mia.innerHTML = text;
   mia.className = "mi";
   mia.onclick = function (e) { mi_click(e) };
   mia.onfocus = function (e) { mi_focus(e) };
   if (url != null) mia.href = url;

   createTag("br", mi);
   }

function createTag(tag, pel)
   {
   el = document.createElement(tag);
   return pel.appendChild(el);
   }

function initMenu(act)
   {
   root = document.getElementById("menu");

   els = root.getElementsByTagName("a");
   for (i=0; i<els.length; i++)
      {   
      els[i].parentNode.className = els[i].parentNode.nextSibling != null ? "lsbg" : "ls";

      img = els[i].parentNode.getElementsByTagName("img")[0];
      if (els[i].parentNode.getElementsByTagName("span")[0] != null)
         { 
         els[i].parentNode.getElementsByTagName("span")[0].style.display = 'none';
         img.src = "fol+.bmp";
         img.onclick = function (e) { img_click(e) };
         }
      else 
         img.src = els[i].parentNode.nextSibling != null ? "ie.bmp" : "ie.bmp";
      }

   if (act != null) node_open(act);
   }

function mi_click(e)
   {
   obj = eventHandler(e);
   node_activate(obj);
   if ((node = obj.parentNode.getElementsByTagName("span")[0]) == null) return;
   if (node.style.display != "block")
      {
      node.style.display = "block";
      obj.parentNode.firstChild.src = "fol-.bmp";
      }
   }


function img_click(e)
   {
   obj = eventHandler(e);
   if ((node=obj.parentNode.getElementsByTagName("span")[0]) == null) return;

   if (node.style.display != "block")
      {
      node.style.display = "block";
      obj.src = "fol-.bmp";
      }
   else
      {
      node.style.display = "none";
      obj.src = "fol+.bmp";
      }
   }


function mi_focus(e)
   {
   obj = eventHandler(e);
   obj.blur();
   }


function node_open(node_id)
   {
   if ((node = document.getElementById(node_id)) == null) return;
   node_activate(node.getElementsByTagName("a")[0]);
   while (node.id != "0") 
      {
      node = node.parentNode;
      node.style.display = "block";
      if(node.tagName == "DIV") node.getElementsByTagName("img")[0].src = "fol-.bmp";
      }
   }


function node_activate(node_a)
   {
   if (active!=null) active.className = 'mi';
   active = node_a;
   active.className += 'act';
   }


function eventHandler(e)
   {
   return window.event ? window.event.srcElement : e.currentTarget;
   }
</script>
<div id="menu">
<script type="text/javascript">

window.onload = function ()
   {
   addItem("0", "Kingdom Animalia", "menu");
        addItem("01", "Subkingdom Eumetazoa", "0");
        addItem("001", "Phylum Acanthocephala", "01","zz.php");
            addItem("0001", "Class Archiacanthocephala", "001","zz.php");
            addItem("0001", "Class Eoacanthocephala", "001");
            addItem("0001", "Class Palaeacanthocephala", "001");
        addItem("002", "Phylum Annelida", "0");
            addItem("0002", "Class Acanthobdellea", "002");
            addItem("0002", "Class Aphanoneura", "002");    
            addItem("0002", "Class Branchiobdellea", "002");
            addItem("0002", "Class Hirudinea", "002");
            addItem("0002", "Class Oligochaeta", "002");
            addItem("0002", "Class Polychaeta", "002");
        addItem("003", "Phylum Arthropoda", "0");
initMenu("48");
   }
   
</script>
</div>
</body>
</html>

P.S. про JqueryTreeView знаю, просто уже много инфы забито в это дерево, долго придется ее переделывать под Jquery.

Всем спасибо. Жду Ваших ответов.
С уважением Роман

  Ответить  
 
 автор: АЯ   (15.11.2009 в 10:56)   письмо автору
 
   для: bibika   (15.11.2009 в 08:32)
 

>"нужно добавить функционал открыть / закрыть все"

Поясните, КУДА ИМЕННО вы собираетесь "воткнуть" управление этим "функционалом".
И тогда, наверно, я смогу вам помочь.

  Ответить  
 
 автор: bibika   (15.11.2009 в 11:35)   письмо автору
 
   для: АЯ   (15.11.2009 в 10:56)
 

Не знаю правильно ли я понял Ваш вопрос. Все очень просто, ставим наверху списка две ссылки, над
<div id="menu">
открыть / закрыть все, в которые как я понимаю прописываются события отображение / скрытия всего и все больше мне ничего не надо.
Буду благодарен за любую помощь.

  Ответить  
 
 автор: АЯ   (15.11.2009 в 14:27)   письмо автору
 
   для: bibika   (15.11.2009 в 11:35)
 

С одной ссылкой, ИМХО, будет удобнее:
<script>
function HideShow (x)
{
var me = document.getElementById ('menu'), im = me.getElementsByTagName ('img'), il = im.length,
sp = me.getElementsByTagName ('span'), sl = sp.length, j = 0, k = 1;
if (x.innerHTML == 'Show All')
   {
   for (; j < il; j++) if (im [j].src.indexOf ('fol+.bmp') > 0) im [j].src = 'fol-.bmp';
   for (; k < sl; k++) sp [k].style.display = 'block'; x.innerHTML = 'Hide All';
   }
else
   {
   for (; j < il; j++) if (im [j].src.indexOf ('fol-.bmp') > 0) im [j].src = 'fol+.bmp';
   for (; k < sl; k++) sp [k].style.display = 'none'; x.innerHTML = 'Show All';
   }
return false;
}
<script>

<a href="#" onclick="return HideShow (this)">Show All</a>

Но если надо именно две ссылки, и если сами не справитесь, то свистите, помогу.

  Ответить  
 
 автор: bibika   (15.11.2009 в 15:46)   письмо автору
 
   для: АЯ   (15.11.2009 в 14:27)
 

Нет мне и одной ссылки хватит. Спасибо все работает отлично, только что проверил.
Еще раз спасибо за помощь Вы мне очень помогли.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования