Ton*_*niq 6 javascript jquery dom
我有一个元素列表:
<div class="wrapper">
<div class="abc"></div>
<div class="abc"></div>
<div class="abc"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
我有一个或多个代表新订单的数字:
var arr = [2,1,0];
Run Code Online (Sandbox Code Playgroud)
我想将这些abc div重新定位到父包装器中的新位置.
重要的是abc divs附加了事件和数据,这需要保留!
我想出了这个,似乎按预期工作:
var wrapper = $('.wrapper'), items = wrapper.children('div.abc');
var orderedItems = $.map(arr, function(value) {
return $(items).clone(true,true).get(value);
});
wrapper.empty().html(orderedItems);
Run Code Online (Sandbox Code Playgroud)
我想确保这是正确的方法.
如果可能的话,我也可以使用javascript解决方案.
请记住,当您添加一个已经在 DOM 中的元素时,该元素将被移动,而不是被复制。
let wrapper=document.querySelector(".wrapper");
let children=wrapper.children;
let newOrder=[3,2,1,0];
//it means that the first element you want it to be the four element
//The second element you want it to be the third
//the third element you want it to be the second
//the four element you want it to be the first
for(let i=0;i<newOrder.length;i++){
for(let j=0;j<newOrder.length;j++){
if(i==newOrder[j]){
wrapper.appendChild(children[j]);
break;
}
}
}Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
<div>a</div>
<div>b</div>
<div>c</div>
<div>d</div>
</div>Run Code Online (Sandbox Code Playgroud)
无需复制所有项目..两次
var wrapper = $('.wrapper'),
items = wrapper.children('.abc'),
arr = [2,1,0];
//items.detach(); if arr doesn't reuse all items
wrapper.append( $.map(arr, function(v){ return items[v] }) );
Run Code Online (Sandbox Code Playgroud)
如果您想要一个纯Javascript解决方案(不涉及jQuery)
var arr = [2,1,0];
var wrapper = document.getElementsByClassName("wrapper");
var items = wrapper[0].children;
var elements = document.createDocumentFragment();
arr.forEach(function(idx) {
elements.appendChild(items[idx].cloneNode(true));
});
wrapper[0].innerHTML = null;
wrapper[0].appendChild(elements);
Run Code Online (Sandbox Code Playgroud)
我以前的回答有些改进。小提琴:https : //jsfiddle.net/jltorresm/1ukhzbg2/2/
我知道这是一个老问题,但谷歌引导我解决这个问题。flexbox (css) 上有一个名为“order”的子属性,它允许您选择元素的显示顺序。可以使用 javascript 更改此子属性并重新排序显示的元素。
https://www.w3schools.com/cssref/css3_pr_order.asp
编辑 1 - 代码示例:
<style>
.wrapper {
display: flex;
flex-flow: column;
}
</style>
<div class="wrapper">
<div class="abc">One</div>
<div class="abc">Tow</div>
<div class="abc">Three</div>
</div>
<button id="reorder" type="button">Reorder</button>
<button id="unreorder" type="button">Unreorder</button>
<script>
var reorderButton = document.querySelector('#reorder');
var unreorderButton = document.querySelector('#unreorder');
var abcDivs = document.querySelectorAll('.abc');
var newOrder = [2, 1, 0];
reorderButton.addEventListener('click', function() {
abcDivs.forEach(function(element, index) {
element.style.order = newOrder[index];
});
});
unreorderButton.addEventListener('click', function() {
abcDivs.forEach(function(element, index) {
element.style.order = null;
});
});
</script>
Run Code Online (Sandbox Code Playgroud)