2010-06-14 3 views
2

Я хотел бы обнаружить, что все элементы содержат родительский элемент и по-прежнему проверяют, имеют ли дочерние элементы дочерние элементы и обнаруживают их.Есть ли способ обнаружить элементы внутри родительского элемента?

Для примера:

<div id="first"> 
    <div id='second1'></div> 
    <div id='second2'> 
      <div id='third1'></div> 
      <div id='third2'> 
       <div id='fourth1'></div> 
       <div id='fourth2'></div> 
      </div> 
      <div id='third3'></div> 
    </div> 
    <div id='second3'></div> 
    <div id='second4'></div> 
</div> 

Я хочу знать список всех ид внутри #First и проверить каждый ребенок, если она имеет ребенок и держать это идти, пока я не полный список всех элементов ,

Я хочу, чтобы этот список в массив любопытное в этой модели

array (
"body"=> { 
      "first" => "second1", "second2" ............. 
     } 
); 
+0

могли бы вы предоставить плз пример того, как массив должен выглядеть? – jantimon

+0

у вас уже есть DOM. Что вы пытаетесь достичь? – SilentGhost

+0

@silentghost, что я пытаюсь выполнить, создать функцию типа getChild (elementname) и получить дочерний идентификатор в массиве, как показано в примере – Starx

ответ

2

Попробуйте это:

$("#first *") 

Вы можете использовать метод детей, чтобы получить дети

$("#first").children() 

Добавить некоторые рекурсии

function recursion (elem, arr) 
{ 
    var id = $(elem).attr('id'); 
    if (id) 
    { 
    var children = arr[ id ] = {}; 
    $(elem).children().each(function(){ recursion(this, children) }); 
    } 
} 

var elements = {}; 
recursion ($("#first"), elements); 
console.log (JSON.stringify(elements)); 

и вы получите

{"first":{"second1":{},"second2":{"third1":{},"third2":{"fourth1":{},"fourth2":{}},"third3":{}},"second3":{},"second4":{}}} 

http://jsbin.com/udaje4/edit

+0

Нет, нет, я хочу держать их в массиве, чтобы Я могу манипулировать ими отдельно, не сразу. спасибо любым способом – Starx

+0

@Starx: Это работает для вас? – jantimon

0

Другой подход:

var childrens = {}; 
$('#first').children().each(function() { 
    id = $(this).attr('id'); 

    if($('#'+id).children().size() > 0) { 
     $('#'+id).children().each(function() { 
      childrens[id] = {} 
      childrens[id][$(this).attr('id')] = {}; 
     }); 
    } else childrens[$(this).attr('id')] = {}; 
}); 

alert(JSON.stringify(childrens)); 
+1

Это не отобразит детей третьего уровня, не так ли? – jantimon

+0

Нет, это просто другой подход, но в конце концов он должен был бы закончиться как рекурсия в любом случае :) Вот почему вы получили +1 от меня – realshadow

Смежные вопросы