如何反转HTML的节点顺序

问题描述

怎么用JS/css把 下图中绿色代码块中的li列表 反转后插入到红色代码块中

初始.png

效果如下
效果.png

html代码如下

<body>
<ul id="target" style="background:red">
  <li>this is the target</li>
</ul>
<ul id="origin" style="background:green">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>    
  <li>6</li>
</ul>
</body>

方法1:

倒叙依次将clone的节点append进入目标节点,该方法的缺点是for循环不断操作DOM,性能较差

var ul=document.getElementById("target");
var list=document.getElementById("origin").querySelectorAll("li");

for(var i = list.length-1; i >= 0; i--){  
    ul.appendChild(list[i].cloneNode(true)); 
};

方法2:

采用 innerHTML outerHTML insertAdjacentHTML等元素操作方法,for循环中直接拿到nodeList的代码源码,然后将代码源码一次append到目标节点中,该方法减少了操作DOM的次数

var ul=document.getElementById("target");
var list=document.getElementById("origin").querySelectorAll("li");

var ch_list=Array.prototype.slice.call(list);
ch_list.reverse();
var str="";
for(var i=0;i<ch_list.length;i++){
  str+=ch_list[i].outerHTML;
}
ul.insertAdjacentHTML('beforeend',str);

方法3:

采用fragment+node节点操作,将nodeList先转移的fragment中,在将fragment中的节点再append到目标节点中

  • 将nodeList 利用数组的方法反转
  • 依次深拷贝反转后的nodeList 并append到fragment
  • 将fragment append到目标节点
var ul=document.getElementById("target");
var list=document.getElementById("origin").querySelectorAll("li");
var ch_list=Array.prototype.slice.call(list);
 ch_list.reverse();

var fragment=document.createDocumentFragment();
for(var i = 0; i<ch_list.length; i++){  
    fragment.appendChild(ch_list[i].cloneNode(true)); 
};
ul.appendChild(fragment);

方法4:

采用css的旋转属性
js部分:

var ul=document.getElementById("target");
var list=document.getElementById("origin")
        .querySelectorAll("li")

var fragment=document.createDocumentFragment();
for(let i=0;i<list.length;i++){
  
fragment.appendChild(list[i].cloneNode(true));
}

ul.insertBefore(fragment,ul.firstChild);

css部分:

#target{
  transform:rotate(180deg);
}
#target li{
  transform:rotate(-180deg);
}

方法5:

采用css 布局
js部分同方法4。
css部分如下:

#target{
  display:flex;
  flex-direction:column-reverse;  
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,776评论 25 709
  • 姓名:谢天珺 年龄:3岁10个月 小组:第四组 #第二阶段30天目标及完成情况# 1.家长目标:早起晨跑3-5公里...
    乔末cc阅读 1,189评论 1 0
  • 161228 没想到可以在卢克索坐到热气球,心愿清单上的事被一件件满足。 在女王神庙和安保分食橙子,老爷爷笑着给我...
    XxXxXxN阅读 1,105评论 0 0
  • 11月,拿相机较少,手机随拍比较多。越来越喜欢这种随手拍摄,所见即所得。 办完事准备上车时,一抬头天空的云彩如...
    明月365阅读 3,456评论 1 1
  • 州官出衙鸣锣开道, 法师做醮击罄施法。 驼铃沙漠惊鸿雁, 醒木大堂吓犯人。 讽刺皇上呼万岁, 心疼小儿盼满月。 纸...
    坦人阅读 2,600评论 1 11