简体   繁体   English

重写此.each()函数的更好方法

[英]Better way to rewrite this .each() function

This code works fine, but I'm guessing there is a better way to rewrite this in either jQuery or vanillaJS. 这段代码可以正常工作,但是我想有一种更好的方法可以用jQuery或vanillaJS重写它。

The main goal is: 主要目标是:

  • To clone specific child elements from parent element 从父元素克隆特定的子元素
  • Create new elements with the cloned child elements 使用克隆的子元素创建新元素
  • Append newly created elements to new container. 将新创建的元素追加到新容器。

     $('.grid-block').each(function(){ var slide = $('<div class="slide"></div>'); $(this).find('.asset-holder img') .clone() .appendTo(slide); $(this).find('.asset-tools') .clone() .appendTo(slide); slide.appendTo('.gallery-slider'); });` 

I don't know that you need iteration, just combine your calls to find() : 我不知道您需要迭代,只需组合您对find()调用即可:

var slide = $('<div class="slide"></div>');
$('.grid-block').find('.asset-holder img, .asset-tools').clone().appendTo(slide);
slide.appendTo('.gallery-slider');

I think, you can use .map() 我认为,您可以使用.map()

 $('.grid-block').map(function() { var $this = $(this), $div = $('<div class="slide"></div>'); $this.find('.asset-holder img') .clone().appendTo($div); $this.find('.asset-tools') .clone().appendTo($div); return $div.get() }).appendTo('.gallery-slider'); 
 .gallery-slider { border: 1px solid red; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="grid-block"> <div class="asset-holder"> <img src="//placehold.it/64X64&text=1" /> </div> <div class="asset-tools"> tools 1 </div> </div> <div class="grid-block"> <div class="asset-holder"> <img src="//placehold.it/64X64&text=2" /> </div> <div class="asset-tools"> tools 2 </div> </div> <div class="grid-block"> <div class="asset-holder"> <img src="//placehold.it/64X64&text=3" /> </div> <div class="asset-tools"> tools 3 </div> </div> <div class="gallery-slider"></div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM