jQuery 的 .get() 偷走了我的元素。好的,但是为什么呢?

jQuery's .get() stole my elements. Ok, but why?

所以我一直在复习我的 jQuery 并且一直在玩 .get() 方法。我知道您可以使用它将 DOM 元素放入数组 $('p').get(); 中,然后访问它们的属性,例如 console.log($('p').get(0).innerText);。但我也注意到,当我试图获取一些元素,将它们放入一个数组并将它们输出到其他地方时,它实际上将它们从 DOM.

中删除了

例如

   var input = $('ul#input li').get();
    $('ul#output').append(input.reverse());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

    <ul id="input">
        <li>1 in line</li>
        <li>2 in line</li>
        <li>3 in line</li>
        <li>4 in line</li>
        <li>5 in line</li>
        <li>6 in line</li>
        <li>7 in line</li>
        <li>8 in line</li>
    </ul>
    
    <ul id="output"></ul>

 

.get() 取出 li 元素并将它们放入数组 I reverse() 数组并输出到另一个 ul

问题 我想知道为什么它将它们从 DOM 中删除?是 "just because",我对此很满意。 googling 想了一会儿,我想我会来请教专家。这里没有错误,只是试图了解该方法的工作原理。 API 没有涵盖这一点。

非常感谢任何能为我指明正确方向的人。

这是有意为之的行为。任何类型的 DOM 操作(.append().prepend().insertAfter() 等)方法采用传递的实例并将其放置在您定义的位置(您不能单个 DOM 节点同时位于两个以上的位置)。

如果您正在寻找您期望的行为,请先致电 .clone(),这样您就可以将新副本放在您想要的位置。这将保留第一个实例(在 ul#input 中找到的实例),同时允许您将另一个实例放置在所需位置 (ul#out)。

$('ul#out').append(
  $('ul#in li').clone().get().reverse()
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<ul id="in">
  <li>1st Item</li>
  <li>2nd Item</li>
  <li>3rd Item</li>
</ul>

<ul id="out">
</ul>