js练习7 --- 操作样式表节点树遍历范围的选择和操作

Posted 劳埃德·福杰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js练习7 --- 操作样式表节点树遍历范围的选择和操作相关的知识,希望对你有一定的参考价值。

目录

1、第一题

已知某网页包含3个样式表,其中两个为外部样式文件,一个为嵌入式样式信息,3个样式信息分别作用在3个文字段落上。
1.修改第一个样式表信息;
2.删除第三个样式表;
3.把第二样式表的背景颜色修改为红色;
4.给第3个段落的文字加上一个蓝色边框。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
  <link rel="stylesheet" type="text/css" href="./css/stylesheet1.css">
  <link rel="stylesheet" type="text/css" href="./css/stylesheet2.css">
  <style type="text/css">
    .p3 
        background-color: yellow;
    
  </style>
</head>
<body>
  <div id="poem">
    <p class="p1">一方沃土</p>
    <p class="p2">养育一代青年</p>
    <p class="p3">爱,从不是单箭头</p>      
  </div>
  <button onclick="changeFirst()">修改第一个样式表</button>
  <button onclick="deleteThird()">删除第三个样式表</button>
  <button onclick="changeSecond()">将第二个样式表中的背景颜色修改为红色</button>
  <button onclick="changeThird()">给第3个段落的文字加上一个蓝色边框</button>
  <script type="text/javascript">
    // 修改第一个样式表
    function changeFirst() 
      let sheet = document.styleSheets[0];
      let rules = sheet.cssRules || sheet.rules;
      let rule = rules[0];
      rule.style.backgroundColor = "pink";
    

    // 删除第三个样式表
    function deleteThird() 
      let sheet = document.styleSheets[2];
      let rules = sheet.cssRules || sheet.rules;
      // 删除样式表中的所有样式
      for(let i = 0; i < rules.length; i++) 
        if (sheet.deleteRule)
          sheet.deleteRule(i); // 其它浏览器
         else if (sheet.removeRule)
          sheet.removeRule(i); // IE浏览器
        
      
    
    
    // 将第二个样式表中的背景颜色修改为红色
    function changeSecond() 
      let sheet = document.styleSheets[1];
      let rules = sheet.cssRules || sheet.rules;
      let rule = rules[0];
      rule.style.backgroundColor = "red";
    

    // 给第3个段落的文字加上一个蓝色边框
    function changeThird() 
      let sheet = document.styleSheets[2];
      let selectorText = ".p3";
      let cssText = "border:2px solid blue";
      if (sheet.insertRule)
          sheet.insertRule(selectorText + "" + cssText + "", 0); //其它浏览器
       else if (sheet.addRule)
          sheet.addRule(selectorText, cssText, 0); //IE浏览器
      
    
  </script>
</body>
</html>

2.第二题

某网页包含有一个4个列表项的有序列表,假设我们只想访问到列表项。要求分别采用NodeIteration和TreeWalker类型方式,其中TreeWalker不允许使用过滤器。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <div id="box">
    <p>列表</p>
    <ul>
      <li>List item 1</li>
      <li>List item 2</li>
      <li>List item 3</li>
      <li>List item 4</li>
    </ul>
  </div>
  <textarea rows="10" cols="40" id="text1"></textarea><br />
  <input type="button" value="使用NodeIteration" onclick="makeList()" /><br />
  <textarea rows="10" cols="40" id="text2"></textarea><br />
  <input type="button" value="使用TreeWalker" onclick="makeList2()" />
  <script>
    // 使用NodeIteration
    function makeList() 
      let div = document.getElementById("box");
      // 过滤器
      let filter = function(node)
          return (node.tagName.toLowerCase() == "li") ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
      ;
      let iterator = document.createNodeIterator(div, NodeFilter.SHOW_ELEMENT, filter, false);    
      let output = document.getElementById("text1");
      let node = iterator.nextNode();
      while (node !== null) 
        output.value += node.tagName + "\\n";
        node = iterator.nextNode();
      
    

    // 使用TreeWalker
    function makeList2() 
        let div = document.getElementById("box");
        let walker = document.createTreeWalker(div, NodeFilter.SHOW_ELEMENT, null, false);
        let output = document.getElementById("text2");
        walker.firstChild();   //走到<p>
        walker.nextSibling();  //走到<ul>
        let node = walker.firstChild();  //走到第一个<li>
        // 访问剩余的<li>
        while (node !== null)   
          output.value += node.tagName + "\\n";                   
          node = walker.nextSibling();
        
    
  </script>
</body>
</html>

3.第三题

某网页中包含一句“We are from NanJing forestry university.”,(其中NanJing是加粗显示)其实现下面操作:
1.选择”Jing fore”内容,并将其背景颜色改为红色;
2移除”from Nan”内容,并将其插入到”forestry universtiy”两个单词之间。 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <p id="text">We are from <b>NanJing</b> forestry university.</p>
  <button onclick="changeBg()">按钮1</button>
  <button onclick="deleteAndInsert()">按钮2</button>
  <script>
    //选择"Jing fore"内容,并将其背景颜色改为红色
    function changeBg() 
      let range1 = document.createRange(), range2 = document.createRange();
      let text = document.getElementById("text");
      let Node1 = text.childNodes[1].firstChild;
      let Node2 = text.lastChild;

      range1.setStart(Node1, 3);
      range1.setEnd(Node1, 7);
      let span = document.createElement("span");
      span.style.backgroundColor = "red";
      range1.surroundContents(span);

      range2.setStart(Node2, 1);
      range2.setEnd(Node2, 5);
      let span2 = document.createElement("span");
      span2.style.backgroundColor = "red";
      range2.surroundContents(span2);
    

    //移除"from Nan"内容,并将其插入到"forestry universtiy"两个单词之间
    function deleteAndInsert() 
      let range = document.createRange();
      let text = document.getElementById("text");
      let startNode = text.firstChild;
      let endNode = text.childNodes[1].firstChild;
      range.setStart(startNode, 7);
      range.setEnd(endNode, 3);
      let fragment = range.extractContents();

      let range2 = document.createRange();
      let Node2 = text.lastChild;
      range2.setStart(Node2, 10);
      range2.setEnd(Node2, 10);
      range2.insertNode(fragment);
    
  </script>
</body>
</html>

以上是关于js练习7 --- 操作样式表节点树遍历范围的选择和操作的主要内容,如果未能解决你的问题,请参考以下文章

二叉树练习

js练习6 --- DOM文本节点的操作动态脚本动态样式操作表格

二叉树链式结构

一个表只能有一个主键索引,一个主键索引可以多个字段

js练习6 --- DOM文本节点的操作动态脚本动态样式操作表格

JS树结构数据的遍历