如何将一个元素列表移动到另一个性能最佳的元素中
How to move an elements list into another element with the best performance?
>我有两个列表,其中包含很多项目"超过 50",我需要移动到一个包含所有事件的单个元素。
<div id="container">
<div><ul id="g1"></ul><ul id="g2"></ul></div>
<div><ul id="gFill"></ul></div>
<div>
我在"g1"和"g2"列表中有相同数量的项目,我需要以交错方式将它们移动到"gFill"。
我正在使用以下脚本:
var gFill = $("#gFill");
var g1 = $("#g1");
var g2 = $("#g2");
while (true) {
if ($("li", g1).size() >= $("li", g2).size()) {
$('li:first', g1).appendTo(gFill);
}
else {
$('li:first', g2).appendTo(gFill);
}
if ($("li", g1).size() < 1 && $("li", g2).size() < 1) {
break;
}
}
尽管移动物品很好,但性能太慢。我必须提高性能,我该怎么做?
之后我需要反转的方法,如果"gFill"到"g1"和"g2",我需要移动项目,我做到了,但也很慢。
var gIn1 = [], gIn2 = [];
var g1 = $("#g1");
var g2 = $("#g2");
$("li", "#container").each(function (i, e) {
var item = this;
if ($("li", g1).size() <= $("li", g2).size()) {
$(this).appendTo(g1);
}
else {
$(this).appendTo(g2);
}
});
异步会很棒
我会在一个操作中移动所有元素,这里的大部分问题可能是由于#gFill
的多个appendTo
,您应该尝试让它只调用一次appendTo
。
首先,我会收集所有<li>
:
var $lis = $('#g1 li, #g2 li');
然后,我将创建一个空数组来保存所有<li>
:
var stack = [];
然后,我会遍历堆栈,从 0 开始计数,向前数一半。
for (var i = 0, j = half; i < half; i++, j++)
所以,我最终会得到这样的东西:
(function ($) {
var $lis = $('#g1 li, #g2 li');
var half = $lis.length / 2;
var stack = [];
for (var i = 0, j = half; i < half; i++, j++) {
stack.push(
$lis.eq(i),
$lis.eq(j)
);
}
$('#gFill').append(stack);
}(jQuery));
您可以通过通过堆栈并按索引将它们移回
。这里有一个小提琴:https://jsfiddle.net/crswll/L62p2tyy/1/
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 按我自己的类克隆另一个元素的内容和顺序
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- 使用svg和javascript将一个类的元素动画化为另一个类
- 将html元素插入到文本字符串中,以匹配另一个html字符串
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- jquery从另一个元素中移除移除
- DIV怎么能像Javascript中的另一个元素一样工作呢
- 使用数据属性将HTML数据复制到另一个元素
- 如何从另一个带下划线的数组中筛选带元素的数组
- 将鼠标悬停在Angular JS中的一个元素上,并将Class添加到另一个元素中
- 在类JavaScript选择的另一个元素中选择一个标记元素
- 只要存在,就用另一个元素替换一个元素
- 检查一个元素是否有一个类与另一个类总是返回true
- 初学者反应查询(如何删除一个元素并附加另一个元素)
- 将jquery ui窗口的父元素设置为另一个元素
- 如何激活下拉菜单:在一个元素上单击768px宽度下方,在另一个元素上将鼠标悬停在768px上方
- Pixijs将元素附加到另一个元素
- 将SVG元素拖动到另一个SVG元素上
- JavaScript:将输入范围行为链接到另一个元素