Web API学习笔记(三)

1.动态的创建元素
document.write()
使用document.write()输出内容,会把之前的整个页面覆盖掉

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <h1>标题</h1>
  <img src="" alt="">
  <input type="button" value="按钮" id="btn">
  <script>
    // 动态创建元素
    // document.write()
    // element.innerHTML
    // document.createElement()
    var btn = document.getElementById('btn');
    btn.onclick = function () {
      // 当点击按钮的时候使用document.write()输出内容,会把之前的整个页面覆盖掉
      document.write('Hello <p>World</p>');
    }
    
  </script>
  <a id="ibangkf" href="http://www.ibangkf.com">网站客服</a>
  <script type="text/javascript" src="http://c.ibangkf.com/i/c-xxxzzzz123.js"></script>
</body>
</html>

element.innerHTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <input type="button" value="按钮" id="btn">
  <div id="box"></div>
  <script>
    // element.innerHTML 
    // var box = document.getElementById('box');
    // box.innerHTML = 'Hello <p>World</p>';
    
    // var btn = document.getElementById('btn');
    // btn.onclick = function () {
    //   var box = document.getElementById('box');
    //   box.innerHTML = 'Hello <p>World</p>';
    // }
    // 
    // 
    // 点击按钮 生成列表,鼠标放上高亮显示的效果
    
    // 模拟数据
    // var datas = ['西施', '貂蝉', '凤姐', '芙蓉姐姐'];
    // var btn = document.getElementById('btn');
    // btn.onclick = function () {
    //   var box = document.getElementById('box');
    //   box.innerHTML = '<ul>';  // 重新绘制

    //   // 遍历数据
    //   for (var i = 0; i < datas.length; i++) {
    //     var data = datas[i];
    //     box.innerHTML += '<li>' + data + '</li>';   // 重新绘制
    //   }

    //   // box.innerHTML = box.innerHTML + '</ul>'
    //   box.innerHTML += '</ul>';  // 重新绘制
    // }
    // 
    // 
    // 优化1
    // var datas = ['西施', '貂蝉', '凤姐', '芙蓉姐姐'];
    // var btn = document.getElementById('btn');
    // btn.onclick = function () {
    //   var box = document.getElementById('box');
    //   var html = '<ul>';    // 重新开辟内存 需要耗费时间

    //   // 遍历数据
    //   for (var i = 0; i < datas.length; i++) {
    //     var data = datas[i];
    //     html += '<li>' + data + '</li>';    // 因为字符串不可变 重新开辟内存 需要耗费时间
    //   }
    //   html += '</ul>';   // 因为字符串不可变 重新开辟内存 需要耗费时间

    //   box.innerHTML = html;   // 重新绘制
    // }


    // 优化2
    var datas = ['西施', '貂蝉', '凤姐', '芙蓉姐姐'];
    var btn = document.getElementById('btn');
    btn.onclick = function () {
      var box = document.getElementById('box');

      // 使用数组替代字符串拼接
      var array = [];
      array.push('<ul>');

      // 遍历数据
      for (var i = 0; i < datas.length; i++) {
        var data = datas[i];
        array.push('<li>' + data + '</li>');
      }
      array.push('</ul>');   

      box.innerHTML = array.join('');  
      // 当li 生成到页面之后,再从页面上查找li 注册事件
      
    }
  </script>
</body>
</html>

element.createElement
appendChild:追加子元素

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div id="box">
    <div>111</div>
  </div>
  <script>
    // 在内存中创建一个DOM对象
    var p = document.createElement('p');
    // 设置对象的属性
    p.innerText = 'hello';
    p.style.color = 'red';
    // 把p元素,放到DOM树上
    var box = document.getElementById('box');
    box.appendChild(p);
  </script>
</body>
</html>

动态生成列表

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <input type="button" value="按钮" id="btn">
  <div id="box"></div>

  <script src="common.js"></script>
  <script>
    var datas = ['西施', '貂蝉', '凤姐', '芙蓉姐姐'];
    // 点击按钮 动态创建列表,鼠标放上高亮显示
    my$('btn').onclick = function () {
      // 动态创建ul,内存中创建对象
      var ul = document.createElement('ul');
      // 把ul 放到页面上    把ul放到DOM树上,并且会重新绘制
      my$('box').appendChild(ul);

      for (var i = 0; i < datas.length; i++) {
        var data = datas[i];
        // 在内存中动态创建li
        var li = document.createElement('li');
        // 把li添加到DOM树,并且会重新绘制
        ul.appendChild(li);
        // 设置li中显示的内容
        // li.innerText = data;
        setInnerText(li, data);

        // 给li注册事件
        li.onmouseover = liMouseOver;
        li.onmouseout = liMouseOut;
      }
    }
    // 当鼠标经过li的时候执行
    function liMouseOver() {
      // 鼠标经过高亮显示
      this.style.backgroundColor = 'red';
    }

    function liMouseOut() {
      // 鼠标离开取消高亮显示
      this.style.backgroundColor = '';
    }

    // 设置标签之间的内容
    // function setInnerText(element, content) {
    //   // 判断当前浏览器是否支持 innerText
    //   if (typeof element.innerText === 'string') {
    //     element.innerText = content;
    //   } else {
    //     element.textContent = content;
    //   }
    // }
  </script>
</body>
</html>

动态创建表格案例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    #box table {
      border-collapse: collapse;
    }
  </style>
</head>
<body>
  <div id="box"></div>
  <script src="common.js"></script>
  <script>
    // var s = {name: 'zs', subject: '语文', score: 90};
    // 模拟数据
    var datas = [
      {name: 'zs', subject: '语文', score: 90},
      {name: 'ls', subject: '数学', score: 80},
      {name: 'ww', subject: '英语', score: 99},
      {name: 'zl', subject: '英语', score: 100},
      {name: 'xs', subject: '英语', score: 60},
      {name: 'dc', subject: '英语', score: 70}
    ];

    // 表头数据
    var headDatas = ['姓名', '科目', '成绩', '操作'];

    // 1 创建table 元素
    var table = document.createElement('table');
    my$('box').appendChild(table);
    table.border = '1px';
    table.width = '400px';

    // 2 创建表头
    var thead = document.createElement('thead');
    table.appendChild(thead);

    var tr = document.createElement('tr');
    thead.appendChild(tr);
    tr.style.height = '40px';
    tr.style.backgroundColor = 'lightgray';

    // 遍历头部数据,创建th
    for (var i = 0; i < headDatas.length; i++) {
      var th = document.createElement('th');
      tr.appendChild(th);
      // th.innerText
      setInnerText(th, headDatas[i]);
    }
    
    // 3 创建数据行
    var tbody = document.createElement('tbody');
    table.appendChild(tbody);
    tbody.style.textAlign = 'center';
    for (var i = 0; i < datas.length; i++) {
      // 一个学生的成绩 {name: 'zl', subject: '英语', score: 100},
      var data = datas[i];
      tr = document.createElement('tr');
      tbody.appendChild(tr);

      // 遍历对象
      for (var key in data) {
        var td = document.createElement('td');
        tr.appendChild(td);
        setInnerText(td, data[key]);
      }
      // 生成删除对应的列
      td = document.createElement('td');
      tr.appendChild(td);
      // 删除的超链接
      var link = document.createElement('a');
      td.appendChild(link);
      link.href = 'javascript:void(0)';
      setInnerText(link, '删除');

      link.onclick = linkDelete;
    }

    function linkDelete() {
      // removeChild()
      // 获取父元素
      // 
      // 获取要删除的行
      var tr = this.parentNode.parentNode;
      tbody.removeChild(tr);
      return false;
    }
  </script>
</body>
</html>

元素操作方法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <input type="button" value="按钮" id="btn">
  <ul id="ul">
    <li>111</li>
    <li>222</li>
    <li>333</li>
  </ul>

  <ul id="sel">
    
  </ul>
  <script>
    // createElement()
    // appendChild()
    // removeChild()
    // 
    // 把元素插入到页面的指定位置
    // insertBefore()
    // 把当前元素的标签进行替换
    // replaceChild()
    // 
    var btn = document.getElementById('btn');
    btn.onclick = function () {
      var li = document.createElement('li');
      li.innerText = 'abc';

      // 把li 插入到ul中的第一个位置
       var ul = document.getElementById('ul');
       ul.insertBefore(li, ul.children[0]);
       
       
       //replaceChild()
       var div = document.createElement('div');
       div.innerText = 'div';
       var ul = document.getElementById('ul');
       ul.replaceChild(div, ul.children[0]);
       
      
      // appendChild()
      var ul = document.getElementById('ul');
      var sel = document.getElementById('sel');
      sel.appendChild(ul.children[0]);
    }
  </script>
</body>
</html>

选择水果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        select {
            width:200px;
            height: 200px;
            background-color: #33cccc;
            font-size: 20px;
        }
    </style>
</head>
<body>
  <select id="all" multiple="multiple">
    <option>苹果</option>
    <option>橘子</option>
    <option></option>
    <option>西瓜</option>
    <option>水蜜桃</option>
  </select>

  <input type="button" value=">>" id="btn1">
  <input type="button" value="<<" id="btn2">
  <input type="button" value=">" id="btn3">
  <input type="button" value="<" id="btn4">

  <select id="select" multiple="multiple">
    
  </select>
  
  <script src="common.js"></script>
  <script>
    var all = my$('all');
    var select = my$('select');

    all.children[0].onclick = function () {
      alert('hello');
    }

    // 1 全部选择
    my$('btn1').onclick = function () {
      // 先获取子元素的个数,将来再发生变化不会受影响
      // 现在len的值始终是当前获取到的all.children.length 当前个数5
      // var len = all.children.length;
      // for (var i = 0; i < len; i++) {
      //   var option = all.children[0];
      //   select.appendChild(option);
      // }
      // 
      // 
      // 使用这种方式移动子元素的话,如果子元素有事件,移动之后元素的事件丢失
      select.innerHTML = all.innerHTML;
      // 当我们是用innerHTML 清空子元素的时候
      // 如果子元素有事件,此时会发生内存泄漏
      all.innerHTML = '';  // 清空标签之间的内容
    }

    // 3 移动选中的水果
    my$('btn3').onclick = function () {
      // 找到所有选中的option
      var array = []; // 存储选中的option
      for (var i = 0; i < all.children.length; i++) {
        var option = all.children[i];
        if (option.selected) {
          array.push(option);
          // 去掉当前option的选中效果
          option.selected = false;
        }
      }

      // 把数组中的option移动到第二个select中
      for (var i = 0; i < array.length; i++) {
        var option = array[i];
        select.appendChild(option);
      }
    }
  </script>
</body>
</html>

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页