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

时间:2015-06-03 14:04:47

标签: jquery dom methods

所以我一直在刷我的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个元素并将它们放入数组reverse()数组并输出到另一个ul

问题 我想知道为什么它会从DOM删除它们?是“只是因为”,我很酷。在googling一段时间之后,我想我会来问专家。这里没有错误,只是试图了解该方法的工作原理。 API没有涵盖这一点。

非常感谢任何可以指引我走向正确方向的人。

1 个答案:

答案 0 :(得分:2)

这是预期的行为。任何类型的DOM操作(.append().prepend().insertAfter()等)方法都会将传递的实例放在您定义的位置(您不能拥有)单个DOM节点同时位于两个+位置。)

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

&#13;
&#13;
$('ul#out').append(
  $('ul#in li').clone().get().reverse()
);
&#13;
<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>
&#13;
&#13;
&#13;