美文网首页
如何反转HTML的节点顺序

如何反转HTML的节点顺序

作者: Jassi | 来源:发表于2018-02-03 18:10 被阅读0次

问题描述

怎么用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;  
}

相关文章

  • 如何反转HTML的节点顺序

    问题描述 怎么用JS/css把 下图中绿色代码块中的li列表 反转后插入到红色代码块中 html代码如下 方法1:...

  • jQuery语法——移动节点,改变节点顺序

    在jQuery中,我们可以使用after()和before()方法来实现移动HTML的元素节点,改变节点的顺序。 ...

  • 链表常见问题

    反转单向链表思路使用一个临时节点当做缓冲节点,通过绕圈完成反转 反转部分链表题:给定一个链表,及反转的范围,完成反...

  • 实战高频leetcode题目

    1. 反转链表 : 反转链表是常见简单题目,定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点...

  • XSS编码绕过之浏览器解析顺序

    一.编码解码发生顺序 浏览器最早开始解析HTML,将标签转化为内容树中的DOM 节点,此时识别标签的时候,HTML...

  • LeetCode 每日一题 [55] 反转链表

    LeetCode 反转链表 [简单] 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 来...

  • 03-28:链表节点每K个反转

    链表节点每K个反转 关键思路: (1)每K个节点,反转K-1次 (2)反转一组后,继续从头再进行反转,重新定位链表...

  • Python基础(47) - Beautiful Soup节点选

    如何使用Beautiful Soup的节点选择器获取节点信息 HTML代码如下: 安装beafutifulsoup...

  • Swift--反转链表

    题: 如图1所示的链表结构, 写一个方法, 使用传入的节点将该链表反转 (传入的节点是首节点, 返回的节点是反转之...

  • LeetCode题解之反转链表

    反转链表 题目描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 限制: 0 ...

网友评论

      本文标题:如何反转HTML的节点顺序

      本文链接:https://www.haomeiwen.com/subject/tizjoxtx.html