js练习5 --- DOM结点操作

第一题

在页面上设置不同按钮,对右下已有无序列表中分别实现节点的下面操作:
·在列表末端增加新的两个列表项
·在列表第一个节点前插入新的一个节点
·替换列表中第三个列表项
·将列表中第二项移到末尾
·移除倒数第二列表项
·在网页中复制该列表


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <ul id = "myList"><li>Nan Jing</li><li>Bei Jing</li><li>Shang Hai</li></ul>
  <button onclick="addTwoToTail()">在列表末端添加两项</button><br/>
  <button onclick="insertBeforeOne()">在第一个节点前插入一个新节点</button><br/>
  <button onclick="replaceThird()">替换第三个列表项</button><br/>
  <button onclick="shiftSecondToTail()">将第二项移到末尾</button><br/>
  <button onclick="removeLastSecond()">移除倒数第二列表项</button><br/>
  <button onclick="copy()">在网页中复制该列表</button>
  <script>
    let list = document.getElementById("myList");
    // 在列表末端添加两项
    function addTwoToTail() {
      let elem = document.createElement("li");
      let textNode = document.createTextNode("Hang Zhou");
      elem.appendChild(textNode);
      let elem2 = document.createElement("li");
      let textNode2 = document.createTextNode("Guang Zhou");
      elem2.appendChild(textNode2);
      list.appendChild(elem);
      list.appendChild(elem2);
    }
    // 在第一个节点前插入一个新节点
    function insertBeforeOne() {
      let elem3 = document.createElement("li");
      let textNode = document.createTextNode("Tian Jin");
      elem3.appendChild(textNode);
      list.insertBefore(elem3, list.childNodes[0]);
    }
    // 替换第三个列表项
    function replaceThird() {
      let elem4 = document.createElement("li");
      let textNode = document.createTextNode("Wu Han");
      elem4.appendChild(textNode);
      list.replaceChild(elem4, list.childNodes[2]);
    }
    // 将第二项移到末尾
    function shiftSecondToTail() {
      let loc = 1; //第二项的位置
      list.appendChild(list.childNodes[loc]); // append添加的结点如果是文档中的结点,会先将它从文档中删除
    }
    // 移除倒数第二列表项
    function removeLastSecond() {
      let loc = list.childNodes.length -  2;
      list.removeChild(list.childNodes[loc]);
    }
    // 在网页中复制该列表
    function copy() {
      let copyNode = list.cloneNode(true);
      document.body.appendChild(copyNode);
    }
  </script>
</body>
</html>

第二题

在一个网页中,输入任意两个节点,判断两个节点之间的关系:
1.是否是同胞节点
2.是否是父子节点关系
3.查找其最近的一个共同父节点,可以包括节点自身


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <div id="node1">编程语言</div>
  <ul id="node2">
    <li>C</li>
    <li>C++</li>
    <li>Java</li>
    <li>Python</li>
  </ul>
  <script>
    let node1 = document.getElementById("node1");
    let node2 = document.getElementById("node2");
    let node3 = node2.childNodes[1];
    
    function relation(node1, node2) {
      if(node1.parentNode == node2.parentNode) {
        console.log("是同胞节点关系");
      } else {
        console.log("不是同胞节点关系");
      }
      if(node1.parentNode == node2 || node2.parentNode == node1) {
        console.log("是父子节点关系");
      } else {
        console.log("不是父子节点关系");
      }
    }
    
    // 查找两个节点最近的一个公共父节点
    function findCommonNode(node1, node2) {
      let pNode = node1;
      while(pNode) {
        if(pNode.contains(node2)) {
          return pNode;
        }
        pNode = pNode.parentNode;
      }
    }
    
    relation(node1, node2);
    console.log(findCommonNode(node1, node2));
    relation(node2, node3);
    console.log(findCommonNode(node2, node3));
  </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漂流の少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>