Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Компактное дерево (https://javascript.ru/forum/dom-window/3421-kompaktnoe-derevo.html)

SAY 17.04.2009 12:43

Компактное дерево
 
Добрый день!

есть скрипт древовидного меню:
<style>

p { margin: 0px }
body { font-size: 11px; font-family: verdana; line-height: 17px }
.sub { padding-left: 20px; display: block }
.menu { cursor: pointer; display: block }
a { text-decoration: none; color: #000000 }

</style>

<script language=JavaScript>

function show(obj) {

if (document.getElementById(obj).style.display == 'none')
document.getElementById(obj).style.display = 'block';
else document.getElementById(obj).style.display = 'none';

}

</script>

<span class="menu" onclick="show('sub1')">+ Статьи</span>

<span class="sub" id="sub1" style="display: none">
<p><a href='http://'>Интернет</a></p>
<p><a href='http://'>JavaScript</a></p>
</span>

<span class="menu" onclick="show('sub2')">+ Рейтинг</span>

<span class="sub" id="sub2" style="display: none">
<p><a href='http://'>Главная</a></p>
<p><a href='http://'>Регистрация</a></p>
<p><a href='http://'>Статистика</a></p>
</span>

<span class="menu" onclick="show('sub3')">+ Форум</span>

<span class="sub" id="sub3" style="display: none; border: 3px">
<p><a href='http://www.webobzor.net'>Регистрация</a></p>
<p><a href='http://www.webobzor.net'>Cообщения</a></p>
<p><a href='http://www.webobzor.net'>Поиск</a></p>
</span>


Как сделать что бы при открытии ветки меню, остальные ранее открытые ветки закрывались?
Спасибо!

x-yuri 18.04.2009 20:49

в show находишь все span'ы с классом sub и скрываешь все, кроме того, который показываешь

SAY 19.04.2009 09:07

Цитата:

Сообщение от x-yuri (Сообщение 17040)
в show находишь все span'ы с классом sub и скрываешь все, кроме того, который показываешь

А можно поподробнее, нашел в инете функцию getElementsByClassName, но она работает только в ff3 и safari3, а хотелось бы, что бы скрипт работал во всех браузерах.

AzriMan 20.04.2009 18:12

видимо, пользоваться поиском по форуму не учили:
function getElementsByClass(searchClass,node,tag) {
 	 //Dustin Diaz's getElementsByClass implementation
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		} //if
	} //for
	return classElements;
}



if(document.getElementsByClassName) {
	var anal_tables  = document.getElementsByClassName("sub");
	//Firefox 3  C++ native implementation
} else {
	var anal_tables  = getElementsByClass("sub", document, "span");
	//Dustin Diaz's getElementsByClass implementation 
}

SAY 24.04.2009 10:33

чего то я не догоню никак, как теперь скрыть то :help:
пытался сделать
document.getElementByClassname("sub").style.display = 'none';

но ничего не получается

Gvozd 24.04.2009 10:55

getElementByClassname возвращают коллекцию объектов, а не один объект.
а getElementsByClass возвращает массив.но не один объект
обращайтесь к конкретному элементу по индексу.
либо перебирайте в цикле все элементы

AzriMan 24.04.2009 11:28

ай опередил меня :)

ЫФН 24.04.2009 12:28

Спасибо всем за помощь!
Сделал сам :dance: только по другому:
function show(obj) {
if (document.getElementById(obj).style.display == 'none')
{
    if(typeof old == "undefined")
    {
       old="";
    }
    else
    {
       document.getElementById(old).style.display = 'none';
    }
    document.getElementById(obj).style.display = 'block';
    old=obj;
    return (old);
}
    else document.getElementById(obj).style.display = 'none';
}

AzriMan 24.04.2009 14:02

если честно - не красиво...

SAY 24.04.2009 14:06

Цитата:

Сообщение от AzriMan (Сообщение 17504)
если честно - не красиво...

Да я и сам уже понял, что кривовато, переделал:
function show(obj) {
if (document.getElementById(obj).style.display == 'none')
{
    if(typeof old != "undefined")
    {
       document.getElementById(old).style.display = 'none';
    }
    document.getElementById(obj).style.display = 'block';
    old=obj;
    return (old);
}
else document.getElementById(obj).style.display = 'none';
}


Часовой пояс GMT +3, время: 16:43.