Je cette version simplifiée de ma page Web (son gâchis IRL):jQuery: comment construire un tableau 2d?
<li id=section1 class=sortable_section>
<header>
<ul id=container1>
<li id=item1 class=sortable_item>
<li id=item2 class=sortable_item>
</container
</section
<li id=section2 class=sortable_section>
<header>
<ul id=container2>
<li id=item3 class=sortable_item>
<li id=item4 class=sortable_item>
<li id=item5 class=sortable_item>
</container>
</section>
Alors, je peux faire $j("container1").sortable('serialize')
qui crée un tableau des ids de tous les contenant de li. donc j'obtiendrais ["item1", "item2"]
pour container1
.
Comment puis-je faire un tableau qui ressemble à ceci:
[
["section1", ["item1", "item2"]],
["section2", ["item3", "item4", "item5"]]
]
C'est ce que Ive essayant: mais il ne fonctionne pas
d = $j.makeArray(
$j('.sortable_section').each(function(i){
[$j(this).attr("id"),
$j.makeArray($j.map($j("#"+$j(this).attr("id")+" .sortable_item"), function(s,j){
return ($j(s).attr("id"));
}))]
}));
Mais il renvoie les objets entiers, plutôt que seulement les ids ....
EDIT: selon l'une des suggestions de réponses, ce qui est maintenant ce que j'ai
d = $j(".sections > li").map(function(index, element){
return [$j(element).attr('id'),
$j("#"+$j(element).attr('id') + " .content").map(function(subindex, subelement){
return $j(subelement).attr('id');
}).toArray()];
}).toArray();
mais je reçois cette erreur
TypeError: Result of expression near '...}).toArray()]...' [undefined] is not a function.
Lorsque je alertes sur $j(element).attr('id')
et $j(subelement).attr('id')
je reçois les ids corrects
Lorsque j'alerte ce code, il me dit que mon tableau est [object Object] plutôt que le tableau désiré dans ma question. – NullVoxPopuli
J'ai modifié la réponse. (J'ai oublié que la fonction jQuery map renvoie un ensemble jQuery) –
J'ai reçu cette erreur TypeError: Résultat de l'expression près de '...}). ToArray() ...' [undefined] n'est pas une fonction. – NullVoxPopuli