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>
所以我一直在复习我的 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>