id DIV'ов в масив

Urii

Новичок
id DIV'ов в масив

Добрый день.
Создал я с помощу jquery ui сайт с меню в виде блоков.
4 столбца в каждом разное количество менюшек.
PHP:
<div id="block1">
 <div id="menu1"></div>
 <div id="menu3"></div>
 <div id="menu6"></div>
 <div id="menu7"></div>
</div>
<div id="block2">
 <div id="menu4"></div>
 <div id="menu5"></div>
 <div id="menu8"></div>
 <div id="menu9"></div>
</div>
<div id="block3">
 <div id="menu14"></div>
 <div id="menu15"></div>
 <div id="menu2"></div>
 <div id="menu16"></div>
</div>
<div id="block4">
 <div id="menu11"></div>
 <div id="menu10"></div>
 <div id="menu12"></div>
 <div id="menu13"></div>
</div>
Можно ли с помощу JS ? получить масив:

(block1 => menu1,menu3,menu6,menu7;
block2 => menu4,menu5,menu8,menu9;
block3 => menu14,menu15,menu2,menu16;
block4 => menu11,menu10,menu12,menu13)

И главное нужно получить ID только этих вложеных Дивов.
Подскажите как это можно определить. Спасибо.
 

Viktor_Rez

Новичок
Можно.
Обойди определенные узлы DOM (document.getElementById('blockN')) и получи (childNodes) id всех дочерних узлов.
 

yantar

Новичок
Re: id DIV'ов в масив

Автор оригинала: Urii
Добрый день.
Создал я с помощу jquery ui сайт с меню в виде блоков.
4 столбца в каждом разное количество менюшек.
PHP:
<div id="block1">
 <div id="menu1"></div>
 <div id="menu3"></div>
 <div id="menu6"></div>
 <div id="menu7"></div>
</div>
<div id="block2">
 <div id="menu4"></div>
 <div id="menu5"></div>
 <div id="menu8"></div>
 <div id="menu9"></div>
</div>
<div id="block3">
 <div id="menu14"></div>
 <div id="menu15"></div>
 <div id="menu2"></div>
 <div id="menu16"></div>
</div>
<div id="block4">
 <div id="menu11"></div>
 <div id="menu10"></div>
 <div id="menu12"></div>
 <div id="menu13"></div>
</div>
Можно ли с помощу JS ? получить масив:

(block1 => menu1,menu3,menu6,menu7;
block2 => menu4,menu5,menu8,menu9;
block3 => menu14,menu15,menu2,menu16;
block4 => menu11,menu10,menu12,menu13)

И главное нужно получить ID только этих вложеных Дивов.
Подскажите как это можно определить. Спасибо.
Если вы юзаете jquery - то вот вам решение на jQuery
PHP:
	var elements = new Array();
	var i = 0;
	$("#block1>div").each(
		function(){
			elements[i++] = this.id	
		}
	)
	alert (elements);
 

Urii

Новичок
Вот, сделано :
PHP:
<script language="javascript">
var  ar = new Object();
for (var  i = 1; i < 5; i++)  
{ 
        nods = document.getElementById(it = 'block'+i);
        els = nods.childNodes;
        eval("ar."+it +" = new Array()");
        for (var u=0; u < els.length; ++u)
			 eval("ar."+it +"["+ u +"] = els["+ u+ "].id") ;
}
        alert("block1=" +ar.block1);
        alert("block2=" +ar.block2);
        alert("block3=" +ar.block3);
        alert("block4=" +ar.block4);
</script>
В IE выводит все отлично но нот в Опере ФФ Хроме и Сафари выводит ещё какието ЧилдНоды без ID.. Я погуглил и нашел что эти браузеры сами додают их.
 

Urii

Новичок
Да, спасибо изменил.
PHP:
 <script language="javascript">
var  ar = new Object();
for (var  i = 1; i < 5; i++)  
{ 
        nods = document.getElementById(it = 'block'+i);
        els = nods.childNodes;
        ar[it]= new Array();
        for (var u=0; u < els.length; ++u)
			if (els[u].id != undefined ) eval("ar."+it +"["+ u +"] = els["+ u+ "].id");
}
        alert("block1=" +ar.block1);
        alert("block2=" +ar.block2);
        alert("block3=" +ar.block3);
        alert("block4=" +ar.block4);
</script>
if (els.id != undefined ) eval("ar."+it +"["+ u +"] = els["+ u+ "].id");

Вот поставил IF для усечки не определенных ID, но они почемуто всеравно не исчезают =(
 

dimagolov

Новичок
Urii, у тебя что, один только eval был? или желания напрячь свое серое вещество отсутствует?

п.с. что за переменная такая undefined ? где ты о такой узнал?
делай просто
PHP:
if (!els[u].id)
, так как что отсутствие значения (пустая строка), что отсутствие свойства (typeof els.id == 'undefined') дату при приведении els.id в boolean false
 

Urii

Новичок
При
PHP:
if (!els[u].id)
в масив не вносит ID childNodoв

-~{}~ 10.09.08 01:21:

Ну ничего средствами ПхП уже на сервере обработаю эти масивы
 

dimagolov

Новичок
Urii, мог догадаться, что ! там лишний? или думать головой слишком сложно для тебя? я же разжевал логику проверки
 

yantar

Новичок
Еще раз повторюсь.
Если вы юзаете jquery - то вот вам решение на jQuery
PHP:
var elements = new Array();
    var i = 0;
    $("#block1>div").each(
        function(){
            elements[i++] = this.id    
        }
    )
    alert (elements);
 

kode

never knows best
yantar
Зачем повторятся? Человек не использует jQuery, для него то и с просто яваскриптом управится проблематично. Или это тонкий намёк чтобы использовать jQuery? ;)

-~{}~ 12.09.08 05:48:

PHP:
function getMenuArray(){
	var returnArray = new Array();
	var elementCloud = document.getElementsByTagName("div");
	
	for(var i=0;i<elementCloud.length;i++){
		var element = elementCloud[i];
		var elementId = elementCloud[i].id;
		if(elementId.indexOf("block")!=0){
			continue;
		}

		returnArray[elementId] = new Array();

		var elementChilds = element.childNodes;
		//SPARTA level 2
		for(var e=0;e<elementChilds.length;e++){
			var child = elementChilds[e];
			var childId = elementChilds[e].id;
			
			if(childId.indexOf('menu')!=0){
				continue;
			}
			
			returnArray[elementId][e] = childId;
		}
	}
	return returnArray;
}
Не самое красивое решение, но более-менее маштабируемо (если с рекурсию переделать, мне просто лень)
 

yantar

Новичок
2 kode:
Но он же сам написал

Создал я с помощу jquery ui сайт с меню в виде блоков.
 

Urii

Новичок
PHP:
 <script language="javascript">
var  ar = new Object();
for (var  i = 1; i < 5; i++)  
{ 
        nods = document.getElementById(it = 'block'+i);
        els = nods.childNodes;
        ar[it]= new Array();
		var j=0;
        for (var u=0; u < els.length; ++u)
			if (els[u].id) 
			{
				ar[it][j] = els[u].id;
				j++;
			}
}
        alert(ar.block1);
        alert(ar.block2);
        alert(ar.block3);
        alert(ar.block4);
</script>
Вот, я понял в чем дело... =) там проблема с массивом была
 
Сверху