【问题标题】:jQuery cloned element is only appending the cloned item once inside of a loopjQuery克隆元素仅在循环内附加一次克隆项目
【发布时间】:2019-04-20 13:28:21
【问题描述】:

我正在尝试根据数字字段的数字输入克隆一组文本。似乎我得到的代码只是将项目一次附加到 .wrap 元素中。 .clone() 或其他我忽略的东西是否有限制,只会附加该项目一次?

我期望会发生什么:
我期望在下面的代码中发生的是,.duplicate 值被更新(假设为 3),.target 元素被克隆,然后.wrap 元素被清空,循环运行并附加 3 个克隆存储在$clone。最后的 .wrap 元素应该包含 3 个 <h2>Target</h2> 元素。

发生了什么:
以上似乎发生了,但最后只有 1 个 <h2>Target</h2> 元素附加到 .wrap 元素上。

代码:

$( 'body' ).change( '.duplicate', function() {
	
  var count  = $( '.duplicate' ).val(),
      $clone = $( '.target' ).clone(),
      i      = 1;

  $( '.wrap' ).html( '' );

  while ( i <= count ) {

    $( '.wrap' ).append( $clone );

    i++;

  }

} );
.duplicate {
  width: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<input type="number" class="duplicate" value="1" min="1" max="5">

<div class="wrap">
  <div class="target">
    <h2>Target</h2>
  </div>
</div>

【问题讨论】:

    标签: javascript jquery append clone


    【解决方案1】:

    每次迭代都需要一个新的克隆,否则每次都只是移动原始的克隆

    此外,一旦您拥有多个该类,您只想克隆其中一个

     $clone = $( '.target' ).first().clone()
    
     while ( i <= count ) {
         $( '.wrap' ).append( $clone.clone() );
    

    【讨论】:

    • 如此简单...谢谢,您的解释澄清了事情。不知道为什么我没有意识到它只是一次克隆元素,只是移动元素。
    • append() 不会复制,所以如果它已经在 dom 中,它只会被附加到一个新位置,在你的情况下可能是相同的位置,只是替换自己跨度>
    猜你喜欢
    • 2021-12-31
    • 2021-12-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多