Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JQuery在DOM上迭代_Javascript_Jquery - Fatal编程技术网

Javascript 使用JQuery在DOM上迭代

Javascript 使用JQuery在DOM上迭代,javascript,jquery,Javascript,Jquery,我试图遍历一个DIV列表,检查它们是否有子对象,如果有,将该DIV的ID与子对象的类一起添加到一个数组中。为了一场游戏而保存建筑是一个很好的选择,如果有更好的方法来实现这一点,我愿意接受建议 HTML 使用。each在每个磁贴上循环,然后使用。在子项上的每个在这些磁贴上循环,可能会有一个更快的算法,如果有,可能会有人评论 saveData.buildings = "[['t2','Extractor']['t8','Forge']]"; $('.tile').each(function(){

我试图遍历一个DIV列表,检查它们是否有子对象,如果有,将该DIV的ID与子对象的类一起添加到一个数组中。为了一场游戏而保存建筑是一个很好的选择,如果有更好的方法来实现这一点,我愿意接受建议

HTML
使用
。each
在每个磁贴上循环,然后使用
。在子项上的每个
在这些磁贴上循环,可能会有一个更快的算法,如果有,可能会有人评论

saveData.buildings = "[['t2','Extractor']['t8','Forge']]"; 
$('.tile').each(function(){
   var parent = $(this); 
   parent.children().each(function(){
      saveData.buildings.push([parent.id,$(this).attr("class")]); 
   });
});
saveData.resources = 'resources';

使用
。each
在每个磁贴上循环,然后使用
。在子项上的每个
在这些磁贴上循环,可能会有一个更快的算法,如果有,可能会有人评论

saveData.buildings = "[['t2','Extractor']['t8','Forge']]"; 
$('.tile').each(function(){
   var parent = $(this); 
   parent.children().each(function(){
      saveData.buildings.push([parent.id,$(this).attr("class")]); 
   });
});
saveData.resources = 'resources';

我还没有测试过,但是使用这种逻辑的东西应该可以正常工作:

results = [];

// iterate over every element with class 'tile'
$('.tile').each(function() {

  var $$ = $(this);

  // does this instance of class tile have a child?
  if ($$.children().length > 0) {

     // store data
     var parent = $$.attr('id');
     var child  = $$.children().first().attr('class');
     results.append([parent, child]);

  }
});

我还没有测试过,但是使用这种逻辑的东西应该可以正常工作:

results = [];

// iterate over every element with class 'tile'
$('.tile').each(function() {

  var $$ = $(this);

  // does this instance of class tile have a child?
  if ($$.children().length > 0) {

     // store data
     var parent = $$.attr('id');
     var child  = $$.children().first().attr('class');
     results.append([parent, child]);

  }
});
.map()
方法用于构建新数组。这里我们选择子图像,并对该集合使用map

.map()
回调的返回值将成为新数组的成员。因为jQuery的
.map()
是。。。古怪的我们需要将返回的数组加倍,因为任何外部数组都会被展平到结果数组中

$('.tile').children("img").map(function(i, el) { 
    return [[el.parentNode.id, el.className]]; 
}).toArray();

最后使用
.toArray()
的原因是jQuery中的
.map()
的这个版本实际上返回了一个类似数组的jQuery对象,但不是实际的数组。所以我们需要转换它。

使用
.map()
方法来构建一个新数组。这里我们选择子图像,并对该集合使用map

.map()
回调的返回值将成为新数组的成员。因为jQuery的
.map()
是。。。古怪的我们需要将返回的数组加倍,因为任何外部数组都会被展平到结果数组中

$('.tile').children("img").map(function(i, el) { 
    return [[el.parentNode.id, el.className]]; 
}).toArray();


最后使用
.toArray()
的原因是jQuery中的
.map()
的这个版本实际上返回了一个类似数组的jQuery对象,但不是实际的数组。所以我们需要转换它。

.stuff(?)
对你不起作用?这就是我遇到的问题。你真的试过了吗?获取元素及其父元素的id,并将它们放入数组中。或者只使用map:
$('.tile').children(“img”).map(函数(i,el){return[[el.parentNode.id,el.className]];})@CrazyTrain谢谢!这就像一个符咒,你能把它贴出来作为答案吗,也许解释一下地图功能是如何工作的?当然。请参见下文。
.stuff(?)
对你不起作用?这就是我被绊倒的部分。你真的试过了吗?获取元素及其父元素的id,并将它们放入数组中。或者只使用map:
$('.tile').children(“img”).map(函数(i,el){return[[el.parentNode.id,el.className]];})@CrazyTrain谢谢!这就像一个符咒,你能把它贴出来作为答案吗,也许解释一下地图功能是如何工作的?当然。看下面。奇怪的是,每个人都被否决了,但你,我希望你没有否决竞争对手的答案。@Mattytomo,我没有。我刚发了这个。:)奇怪的是,每个人都被否决了,但你,我希望你没有否决竞争对手的答案。@Mattytomo,我没有。我刚发了这个。:)Yeap知道有比我更好的算法:)@PatrickEvans:你的算法也很好。我给你一个+1,因为它确实解决了这个问题。Yeap知道有比我更好的算法:)@PatrickEvans:你的算法也很好。我给你一个+1,因为它确实解决了这个问题。