1.0事件

常见的鼠标事件

鼠标事件 触发条件
onclick 鼠标点击左键触发
onmouseover 鼠标经过触发
onmouseout 鼠标离开触发
onfocus 获得鼠标焦点触发
onblur 失去鼠标焦点触发
onmousemove 鼠标移动触发
onmouseup 鼠标弹起触发
onmousedown 鼠标按下触发

2.0自定义属性操作

2.1 获取自定义属性element.getAttribute(‘属性’);

  1. <div id="demo" index="1" class="nav"></div>
  2. <script>
  3. var div = document.querySelector('div');
  4. // 1. 获取元素的属性值
  5. console.log(div.id);
  6. //2.0 get得到获取 attribute 属性的意思 我们程序员自己添加的属性我们称为自定义属性 index
  7. console.log(div.getAttribute('id'));//getAttribute也可以获取自带属性,但是没有点语法方便
  8. console.log(div.getAttribute('index'));
  9. </script>

2.2 设置属性值element.setAttribute(‘属性’,’属性值’);

  1. div.id = 'test';
  2. div.className = 'navs';
  3. // element.setAttribute('属性', '值'); 主要针对于自定义属性
  4. div.setAttribute('index', 2);
  5. div.setAttribute('class', 'footer'); // class 特殊 这里面写的就是class (也可以设置自带属性,但是麻烦)

2.3 移除自定义属性语法:element.removeAttribute(‘属性值’)

  1. // 移除属性 removeAttribute(属性)
  2. div.removeAttribute('index');
  3. div.removeAttribute('id');

2.4 H5自定义属性

  • H5规定自定义属性data-开头做为属性名并且赋值。
    • <div data-index=“1”></div>
  • 获取语法:element.getAttribute(‘data-index’);
  • H5新增获取语法:element.dataset.index 或者 element.dataset[‘index’] ie 11才开始支持
  • 设置语法:element.setAttribute(‘data-index’, 2)
  1. <div getTime="20" data-index="2" data-list-name="andy"></div>
  2. <script>
  3. var div = document.querySelector('div');
  4. // console.log(div.getTime);
  5. console.log(div.getAttribute('getTime'));
  6. div.setAttribute('data-time', 20);
  7. console.log(div.getAttribute('data-index'));
  8. console.log(div.getAttribute('data-list-name'));
  9. // h5新增的获取自定义属性的方法 它只能获取data-开头的
  10. // dataset 是一个集合里面存放了所有以data开头的自定义属性
  11. console.log(div.dataset);
  12. console.log(div.dataset.index);
  13. console.log(div.dataset['index']);
  14. // 如果自定义属性里面有多个-链接的单词,我们获取的时候采取 驼峰命名法
  15. console.log(div.dataset.listName);
  16. console.log(div.dataset['listName']);
  17. </script>

3.0节点操作

3.1父级节点

  1. 语法:element.parentNode
  • 如果element没有父节点,那么就返回null
  1. <div class="demo">
  2. <div class="box">
  3. <span class="erweima">×</span>
  4. </div>
  5. </div>
  6. <script>
  7. // 1. 父节点 parentNode
  8. var erweima = document.querySelector('.erweima');
  9. // var box = document.querySelector('.box');
  10. // 得到的是离元素最近的父级节点(亲爸爸) 如果找不到父节点就返回为 null
  11. console.log(erweima.parentNode);//box
  12. </script>

3.2子节点

  • 获取子节点语法:element.childNodes,返回element的所有子节点的集合 (包括元素节点,文本节点等)
  • 获取子元素节点语法:element.children,返回element的所有的子元素节点 *
  1. <ul>
  2. <li>我是li</li>
  3. <li>我是li</li>
  4. <li>我是li</li>
  5. <li>我是li</li>
  6. </ul>
  7. <script>
  8. // DOM 提供的方法(API)获取
  9. var ul = document.querySelector('ul');
  10. var lis = ul.querySelectorAll('li');
  11. // 1. 子节点 childNodes 所有的子节点 包含 元素节点 文本节点等等
  12. console.log(ul.childNodes);
  13. console.log(ul.childNodes[0].nodeType);
  14. console.log(ul.childNodes[1].nodeType);
  15. // 2. children 获取所有的子元素节点 也是我们实际开发常用的
  16. console.log(ul.children);
  17. </script>
  • 获取第一个子节点:element.firstChild
    返回element的第一个子节点 (这个子节点可以是元素节点,也可以是文本节点)
  • 获取最后一个子节点:element.lastChild
    返回element的最后一个子节点(这个子节点可以是元素节点,也可以是文本节点)
  • 获取第一个子元素节点:element.firstElementChild IE9+
    返回第一个子元素节点
  • 获取最后一个子元素节点:element.lastElementChild IE9+
    返回最后一个子元素节点

实际开发中,firstChild 和 lastChild 包含其他节点,操作不方便,而 firstElementChild 和 lastElementChild又有兼容性问题,那么我们如何获取第一个子元素节点或最后一个子元素节点呢?

  • 如果想要第一个子元素节点,可以使用 element.chilren[0]
  • 如果想要最后一个子元素节点,可以使用 element.chilren[element.chilren.length - 1]
  1. <ol>
  2. <li>我是li1</li>
  3. <li>我是li2</li>
  4. <li>我是li3</li>
  5. <li>我是li4</li>
  6. <li>我是li5</li>
  7. </ol>
  8. <script>
  9. var ol = document.querySelector('ol');
  10. // 1. firstChild 第一个子节点 不管是文本节点还是元素节点
  11. console.log(ol.firstChild);
  12. console.log(ol.lastChild);
  13. // 2. firstElementChild 返回第一个子元素节点 ie9才支持
  14. console.log(ol.firstElementChild);
  15. console.log(ol.lastElementChild);
  16. // 3. 实际开发的写法 既没有兼容性问题又返回第一个子元素
  17. console.log(ol.children[0]);
  18. console.log(ol.children[ol.children.length - 1]);
  19. </script>

3.2兄弟节点

  • 获取下一个兄弟节点:element.nextSibling
    返回element的下一个兄弟节点(这个节点可以是元素节点,也可以是文本节点)
  • 获取上一个兄弟节点:element.previousSibling
    返回element的上一个兄弟节点(这个节点可以是元素节点,也可以是文本节点)
  • 获取下一个兄弟元素节点:element.nextElementSibling IE9+ *
    返回element的下一个兄弟元素节点
  • 获取上一个兄弟元素节点:element.previousElementSibling IE9+ *
    返回element的上一个兄弟元素节点
  1. <div>我是div</div>
  2. <span>我是span</span>
  3. <script>
  4. var div = document.querySelector('div');
  5. // 1.nextSibling 下一个兄弟节点 包含元素节点或者 文本节点等等
  6. console.log(div.nextSibling);
  7. console.log(div.previousSibling);
  8. // 2. nextElementSibling 得到下一个兄弟元素节点
  9. console.log(div.nextElementSibling);
  10. console.log(div.previousElementSibling);
  11. </script>

获取下一个兄弟元素兼容函数写法:

  1. function getNextElementSibling(element) {
  2. var el = element;
  3. while (el = el.nextSibling) {
  4. if (el.nodeType === 1) {
  5. return el;
  6. }
  7. }
  8. return null;
  9. }

3.3创建节点

  • 创建节点:document.createElement('tagName')
  • document.createElement() 方法创建由 tagName 指定的 HTML 元素。
  • 因为这些元素原先不存在,是根据我们的需求动态生成的,所以我们也称为动态创建元素节点。

3.4添加节点

  • 创建出来的元素节点,需要添加到界面上才能显示
  • 添加方式:
    1. 末尾添加:element.appendChild(childNode)
      将 childNode 添加到element的子节点列表的末尾 (追加)
    2. 指定位置添加:element.insertBefore(childNode, 指定元素)
      将childNode 添加到element的指定元素的前面
      1. <ul>
      2. <li>123</li>
      3. </ul>
      4. <script>
      5. // 1. 创建节点元素节点
      6. var li = document.createElement('li');
      7. // 2. 添加节点 node.appendChild(child) node 父级 child 是子级 后面追加元素
      8. var ul = document.querySelector('ul');
      9. ul.appendChild(li);
      10. // 3. 添加节点 node.insertBefore(child, 指定元素);
      11. var li2 = document.createElement('li');
      12. ul.insertBefore(li2, ul.children[0]);
      13. // 4. 我们想要页面添加一个新的元素 : 1. 创建元素 2. 添加元素
      14. </script>

      3.5 删除节点
      说明:node.removeChild() 方法从 node节点中删除一个子节点,返回删除的节点。

      1. node.removeChild(child)
      1. <button>删除</button>
      2. <ul>
      3. <li>熊大</li>
      4. <li>熊二</li>
      5. <li>光头强</li>
      6. </ul>
      7. <script>
      8. // 1.获取元素
      9. var ul = document.querySelector('ul');
      10. var btn = document.querySelector('button');
      11. // 2. 删除元素 node.removeChild(child)
      12. // ul.removeChild(ul.children[0]);
      13. // 3. 点击按钮依次删除里面的孩子
      14. btn.onclick = function() {
      15. if (ul.children.length == 0) {
      16. this.disabled = true;
      17. } else {
      18. //注意:每次点击都是删除第一个
      19. //第一次删除3个里边的第一个,删除之后原来的1,2变为0,1,所以在次删除还是删除0
      20. ul.removeChild(ul.children[0]);
      21. }
      22. }
      23. </script>

      3.5 克隆节点

      1. node.cloneNode([isDeep]) ;// 是否深度拷贝,true
      1. <ul>
      2. <li>1111</li>
      3. <li>2</li>
      4. <li>3</li>
      5. </ul>
      6. <script>
      7. var ul = document.querySelector('ul');
      8. // 1. node.cloneNode(); 括号为空或者里面是false 浅拷贝 只复制标签不复制里面的内容
      9. // 2. node.cloneNode(true); 括号为true 深拷贝 复制标签复制里面的内容
      10. var lili = ul.children[0].cloneNode(true);
      11. ul.appendChild(lili);
      12. </script>
      13. //理解:
      14. //浅拷贝,只是浅浅的拷贝,点到为止,所以只给标签表面(标签本身)拷贝了一下
      15. //深拷贝,就是深度的拷贝,将标签表面,和标签内部所有的内容都拷贝

4.0案例

4.1百度换肤效果

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. body {
  13. background: url(img/1.jpg) no-repeat center top;
  14. }
  15. li {
  16. list-style: none;
  17. }
  18. .baidu {
  19. overflow: hidden;
  20. margin: 100px auto;
  21. background-color: #fff;
  22. width: 410px;
  23. padding-top: 3px;
  24. }
  25. .baidu li {
  26. float: left;
  27. margin: 0 1px;
  28. cursor: pointer;
  29. }
  30. .baidu img {
  31. width: 100px;
  32. }
  33. </style>
  34. </head>
  35. <body>
  36. <ul class="baidu">
  37. <li><img src="img/1.jpg"></li>
  38. <li><img src="img/2.jpg"></li>
  39. <li><img src="img/3.jpg"></li>
  40. <li><img src="img/4.jpg"></li>
  41. </ul>
  42. <script>
  43. var imgs = document.querySelector('.baidu').querySelectorAll('img');
  44. for (var i = 0; i < imgs.length; i++) {
  45. imgs[i].onclick = function () {
  46. document.body.style.backgroundImage = 'url(' + this.src + ')'
  47. }
  48. }
  49. </script>
  50. </body>
  51. </html>

4.2精灵图循环

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. li {
  13. list-style-type: none;
  14. }
  15. .box {
  16. width: 250px;
  17. margin: 100px auto;
  18. }
  19. .box li {
  20. float: left;
  21. width: 24px;
  22. height: 24px;
  23. background-color: pink;
  24. margin: 15px;
  25. background: url(./sprite.png) no-repeat;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div class="box">
  31. <ul>
  32. <li></li>
  33. <li></li>
  34. <li></li>
  35. <li></li>
  36. <li></li>
  37. <li></li>
  38. <li></li>
  39. <li></li>
  40. <li></li>
  41. <li></li>
  42. <li></li>
  43. <li></li>
  44. </ul>
  45. </div>
  46. <script>
  47. var li = document.querySelectorAll('li');
  48. for (var i = 0; i < li.length; i++) {
  49. var index = i * 44;
  50. li[i].style.backgroundPosition = '0 -' + index + 'px';
  51. }
  52. </script>
  53. </body>
  54. </html>

4.3 商品全选及全选

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <style>
  6. </style>
  7. </head>
  8. <body>
  9. <div class="bg">
  10. <input type="checkbox" name="" id="quan"> <b>全选</b> <br> <br>
  11. <br> <br>
  12. </div>
  13. <div class="box">
  14. <input type="checkbox" name="" id=""> 吃饭 <br>
  15. <input type="checkbox" name="" id=""> 睡觉 <br>
  16. <input type="checkbox" name="" id=""> 打豆豆i <br>
  17. <input type="checkbox" name="" id=""> 在吃饭<br>
  18. </div>
  19. <script>
  20. var quan = document.querySelector('#quan');
  21. var inps = document.querySelectorAll('.box input');
  22. //先把全选的情况实现 ---下边的复选框全部选中
  23. quan.onclick = function () {
  24. for (var i = 0; i < inps.length; i++) {
  25. inps[i].checked = quan.checked;
  26. }
  27. }
  28. for (var i = 0; i < inps.length; i++) {
  29. inps[i].onclick = function () {
  30. // 小的复选框的选中个数
  31. var num = 0;
  32. for (var i = 0; i < inps.length; i++) {
  33. if (inps[i].checked == true) {
  34. num++;
  35. }
  36. }
  37. console.log(num);
  38. if (num == inps.length) {
  39. quan.checked = true;
  40. } else {
  41. quan.checked = false;
  42. }
  43. }
  44. }
  45. </script>
  46. </body>
  47. </html>//辉哥思想
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. padding: 0;
  10. margin: 0;
  11. }
  12. .wrap {
  13. width: 300px;
  14. margin: 100px auto 0;
  15. }
  16. table {
  17. border-collapse: collapse;
  18. border-spacing: 0;
  19. border: 1px solid #c0c0c0;
  20. width: 300px;
  21. }
  22. th,
  23. td {
  24. border: 1px solid #d0d0d0;
  25. color: #404060;
  26. padding: 10px;
  27. }
  28. th {
  29. background-color: #09c;
  30. font: bold 16px "微软雅黑";
  31. color: #fff;
  32. }
  33. td {
  34. font: 14px "微软雅黑";
  35. }
  36. tbody tr {
  37. background-color: #f0f0f0;
  38. }
  39. tbody tr:hover {
  40. cursor: pointer;
  41. background-color: #fafafa;
  42. }
  43. </style>
  44. </head>
  45. <body>
  46. <div class="wrap">
  47. <table>
  48. <thead>
  49. <tr>
  50. <th>
  51. <input type="checkbox" id="j_cbAll" />
  52. </th>
  53. <th>商品</th>
  54. <th>价钱</th>
  55. </tr>
  56. </thead>
  57. <tbody id="j_tb">
  58. <tr>
  59. <td>
  60. <input type="checkbox" />
  61. </td>
  62. <td>iPhone8</td>
  63. <td>8000</td>
  64. </tr>
  65. <tr>
  66. <td>
  67. <input type="checkbox" />
  68. </td>
  69. <td>iPad Pro</td>
  70. <td>5000</td>
  71. </tr>
  72. <tr>
  73. <td>
  74. <input type="checkbox" />
  75. </td>
  76. <td>iPad Air</td>
  77. <td>2000</td>
  78. </tr>
  79. <tr>
  80. <td>
  81. <input type="checkbox" />
  82. </td>
  83. <td>Apple Watch</td>
  84. <td>2000</td>
  85. </tr>
  86. </tbody>
  87. </table>
  88. </div>
  89. <script>
  90. var quan = document.querySelector('#j_cbAll');
  91. var ipt = document.getElementById('j_tb').getElementsByTagName('input');
  92. quan.onclick = function () {
  93. // this.checked 它可以得到当前复选框的选中状态如果是true 就是选中,如果是false 就是未选中
  94. console.log(this.checked);
  95. for (var i = 0; i < ipt.length; i++) {
  96. ipt[i].checked = this.checked; //如果ipt的第i为true就选中
  97. }
  98. }
  99. for (var i = 0; i < ipt.length; i++) {
  100. ipt[i].onclick = function () {
  101. var flag = true;
  102. for (var i = 0; i < ipt.length; i++) { //每次点击都循环检测有没有选中
  103. if (!ipt[i].checked) { //false
  104. flag = false;
  105. break //退出循环判断
  106. }
  107. }
  108. quan.checked = flag; //是true 才全选
  109. }
  110. }
  111. </script>
  112. </body>
  113. </html>//pink老师思想

4.4生成表格

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. table {
  9. width: 600px;
  10. cursor: pointer;
  11. }
  12. table td {
  13. text-align: center;
  14. }
  15. table th {
  16. background-color: blueviolet;
  17. }
  18. table tr {
  19. background-color: pink;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <div id="dv">
  25. 请输入姓名:
  26. <input type="text" value="" id="uname" />
  27. <br /> 请输入邮箱:
  28. <input type="text" value="" id="email" />
  29. </div>
  30. <input type="button" value="添加" id="btn" />
  31. <table border="1" cellpadding="0" cellspacing="0" id="tb">
  32. <thead>
  33. <tr>
  34. <th>姓名</th>
  35. <th>邮箱</th>
  36. </tr>
  37. </thead>
  38. <tbody id="tbd">
  39. <tr>
  40. <td>小黑</td>
  41. <td>xiaohei@126.com</td>
  42. </tr>
  43. </tbody>
  44. </table>
  45. <script>
  46. var btn = document.querySelector('#btn');
  47. btn.onclick = function () {
  48. var uname = document.getElementById('uname');
  49. var email = document.getElementById('email');
  50. if (uname.value == '' || email.value == '') {
  51. alert('内容为空,重新输入');
  52. return
  53. }
  54. var tr = document.createElement('tr'); //创建行节点
  55. var tbd = document.getElementById('tbd') //获取tbd
  56. tbd.appendChild(tr); //将行添加到tbd
  57. var td1 = document.createElement('td'); //添加td节点
  58. var td2 = document.createElement('td'); //添加td节点
  59. td1.innerHTML = uname.value; //吧uname的内容给第一个td
  60. td2.innerHTML = email.value; //吧email的内容给第er个td
  61. tr.appendChild(td1); //设置节点 给 tr
  62. tr.appendChild(td2); //设置节点 给 tr
  63. }
  64. </script>
  65. </body>
  66. </html>

4.5点击盒子body变色

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. p {
  13. float: left;
  14. width: 100px;
  15. height: 100px;
  16. border: 1px solid red;
  17. margin: 130px;
  18. }
  19. p:nth-child(1) {
  20. background-color: pink;
  21. }
  22. p:nth-child(2) {
  23. background-color: orange;
  24. }
  25. p:nth-child(3) {
  26. background-color: yellow;
  27. }
  28. p:nth-child(4) {
  29. background-color: black;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <p>1</p>
  35. <p>2</p>
  36. <p>3</p>
  37. <p>4</p>
  38. <script>
  39. var p = document.querySelectorAll('p');
  40. for (var i = 0; i < p.length; i++) {
  41. p[i].setAttribute('index', i)
  42. p[i].onclick = function () { //给每个p绑定事件
  43. var index = this.getAttribute('index');
  44. if (index == 0) {
  45. document.body.style.backgroundColor = 'pink';
  46. } else if (index == 1) {
  47. document.body.style.backgroundColor = 'orange';
  48. } else if (index == 2) {
  49. document.body.style.backgroundColor = 'yellow';
  50. } else if (index == 3) {
  51. document.body.style.backgroundColor = 'black';
  52. }
  53. }
  54. }
  55. </script>
  56. </body>
  57. </html>

4.6 仿京东点击显示信息

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. padding: 0;
  10. margin: 0;
  11. }
  12. li {
  13. list-style: none;
  14. }
  15. .box {
  16. width: 500px;
  17. height: 50px;
  18. background-color: pink;
  19. margin: 100px auto;
  20. }
  21. .t ul li {
  22. float: left;
  23. width: 100px;
  24. height: 50px;
  25. text-align: center;
  26. line-height: 50px;
  27. cursor: pointer;
  28. }
  29. .item {
  30. display: none;
  31. }
  32. .red {
  33. background-color: yellow;
  34. }
  35. </style>
  36. </head>
  37. <body>
  38. <div>
  39. <div class="box">
  40. <div class="t">
  41. <ul>
  42. <li class="red">商品介绍</li>
  43. <li>规格包装</li>
  44. <li>售后保障</li>
  45. <li>商品评价</li>
  46. <li>手机社区</li>
  47. </ul>
  48. </div>
  49. <div class="b">
  50. <div class="item">商品介绍</div>
  51. <div class="item">规格包装</div>
  52. <div class="item">售后保障</div>
  53. <div class="item">商品评价</div>
  54. <div class="item">手机社区</div>
  55. </div>
  56. </div>
  57. </div>
  58. <script>
  59. var li = document.querySelectorAll('li'); //获取所有li
  60. var items = document.querySelectorAll('.item'); //获取所有div
  61. for (var i = 0; i < li.length; i++) {
  62. li[i].setAttribute('index', i); //给每个li设置自定义属性(或者理解索引)
  63. li[i].onclick = function () { //给每个li添加点击事件
  64. for (var i = 0; i < li.length; i++) { //派他思想
  65. li[i].className = ''; //把每个li的颜色干掉
  66. }
  67. this.className = 'red'; //留下自己的颜色
  68. var index = this.getAttribute('index') //获取自定义属性(索引)
  69. for (var i = 0; i < items.length; i++) { //派他思想
  70. items[i].style.display = 'none'; //让div隐藏
  71. }
  72. items[index].style.display = 'block'; //之让自己显示
  73. }
  74. }
  75. </script>
  76. </body>
  77. </html>

4.7仿微博下拉菜单

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. li {
  13. list-style-type: none;
  14. }
  15. a {
  16. text-decoration: none;
  17. font-size: 14px;
  18. }
  19. .nav {
  20. margin: 100px;
  21. }
  22. .nav>li {
  23. position: relative;
  24. float: left;
  25. width: 80px;
  26. height: 41px;
  27. text-align: center;
  28. }
  29. .nav li a {
  30. display: block;
  31. width: 100%;
  32. height: 100%;
  33. line-height: 41px;
  34. color: #333;
  35. }
  36. .nav>li>a:hover {
  37. background-color: #eee;
  38. }
  39. .nav ul {
  40. display: none;
  41. position: absolute;
  42. top: 41px;
  43. left: 0;
  44. width: 100%;
  45. border-left: 1px solid #FECC5B;
  46. border-right: 1px solid #FECC5B;
  47. }
  48. .nav ul li {
  49. border-bottom: 1px solid #FECC5B;
  50. }
  51. .nav ul li a:hover {
  52. background-color: #FFF5DA;
  53. }
  54. </style>
  55. </head>
  56. <body>
  57. <ul class="nav">
  58. <li>
  59. <a href="#">微博</a>
  60. <ul>
  61. <li>
  62. <a href="">私信</a>
  63. </li>
  64. <li>
  65. <a href="">评论</a>
  66. </li>
  67. <li>
  68. <a href="">@我</a>
  69. </li>
  70. </ul>
  71. </li>
  72. <li>
  73. <a href="#">微博</a>
  74. <ul>
  75. <li>
  76. <a href="">私信</a>
  77. </li>
  78. <li>
  79. <a href="">评论</a>
  80. </li>
  81. <li>
  82. <a href="">@我</a>
  83. </li>
  84. </ul>
  85. </li>
  86. <li>
  87. <a href="#">微博</a>
  88. <ul>
  89. <li>
  90. <a href="">私信</a>
  91. </li>
  92. <li>
  93. <a href="">评论</a>
  94. </li>
  95. <li>
  96. <a href="">@我</a>
  97. </li>
  98. </ul>
  99. </li>
  100. <li>
  101. <a href="#">微博</a>
  102. <ul>
  103. <li>
  104. <a href="">私信</a>
  105. </li>
  106. <li>
  107. <a href="">评论</a>
  108. </li>
  109. <li>
  110. <a href="">@我</a>
  111. </li>
  112. </ul>
  113. </li>
  114. </ul>
  115. <script>
  116. var nav = document.querySelector('.nav');
  117. var lis = nav.children; // 得到4个小li
  118. for (var i = 0; i < lis.length; i++) {
  119. lis[i].onmouseover = function () {
  120. this.children[1].style.display = 'block'
  121. }
  122. lis[i].onmouseout = function () {
  123. this.children[1].style.display = ''
  124. }
  125. }
  126. </script>
  127. </body>
  128. </html>

4.8动态创建表格

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. li {
  13. list-style-type: none;
  14. }
  15. a {
  16. text-decoration: none;
  17. font-size: 14px;
  18. }
  19. .nav {
  20. margin: 100px;
  21. }
  22. .nav>li {
  23. position: relative;
  24. float: left;
  25. width: 80px;
  26. height: 41px;
  27. text-align: center;
  28. }
  29. .nav li a {
  30. display: block;
  31. width: 100%;
  32. height: 100%;
  33. line-height: 41px;
  34. color: #333;
  35. }
  36. .nav>li>a:hover {
  37. background-color: #eee;
  38. }
  39. .nav ul {
  40. display: none;
  41. position: absolute;
  42. top: 41px;
  43. left: 0;
  44. width: 100%;
  45. border-left: 1px solid #FECC5B;
  46. border-right: 1px solid #FECC5B;
  47. }
  48. .nav ul li {
  49. border-bottom: 1px solid #FECC5B;
  50. }
  51. .nav ul li a:hover {
  52. background-color: #FFF5DA;
  53. }
  54. </style>
  55. </head>
  56. <body>
  57. <ul class="nav">
  58. <li>
  59. <a href="#">微博</a>
  60. <ul>
  61. <li>
  62. <a href="">私信</a>
  63. </li>
  64. <li>
  65. <a href="">评论</a>
  66. </li>
  67. <li>
  68. <a href="">@我</a>
  69. </li>
  70. </ul>
  71. </li>
  72. <li>
  73. <a href="#">微博</a>
  74. <ul>
  75. <li>
  76. <a href="">私信</a>
  77. </li>
  78. <li>
  79. <a href="">评论</a>
  80. </li>
  81. <li>
  82. <a href="">@我</a>
  83. </li>
  84. </ul>
  85. </li>
  86. <li>
  87. <a href="#">微博</a>
  88. <ul>
  89. <li>
  90. <a href="">私信</a>
  91. </li>
  92. <li>
  93. <a href="">评论</a>
  94. </li>
  95. <li>
  96. <a href="">@我</a>
  97. </li>
  98. </ul>
  99. </li>
  100. <li>
  101. <a href="#">微博</a>
  102. <ul>
  103. <li>
  104. <a href="">私信</a>
  105. </li>
  106. <li>
  107. <a href="">评论</a>
  108. </li>
  109. <li>
  110. <a href="">@我</a>
  111. </li>
  112. </ul>
  113. </li>
  114. </ul>
  115. <script>
  116. var nav = document.querySelector('.nav');
  117. var lis = nav.children; // 得到4个小li
  118. for (var i = 0; i < lis.length; i++) {
  119. lis[i].onmouseover = function () {
  120. this.children[1].style.display = 'block'
  121. }
  122. lis[i].onmouseout = function () {
  123. this.children[1].style.display = ''
  124. }
  125. }
  126. </script>
  127. </body>
  128. </html>

4.9仿留言板效果

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. div {
  9. width: 500px;
  10. margin: 100px auto;
  11. }
  12. * {
  13. margin: 0;
  14. padding: 0;
  15. }
  16. li {
  17. width: 220px;
  18. height: 50px;
  19. line-height: 50px;
  20. list-style: none;
  21. color: #333;
  22. background-color: #ccc;
  23. }
  24. a {
  25. float: right;
  26. color: red;
  27. line-height: 50px;
  28. cursor: pointer;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div>
  34. <textarea name="" id="" cols="30" rows="10"></textarea>
  35. <button>发表</button>
  36. <ul>
  37. </ul>
  38. </div>
  39. <script>
  40. var btn = document.querySelector('button');
  41. var ul = document.querySelector('ul');
  42. var text = document.querySelector('textarea');
  43. var li = document.querySelectorAll('li')
  44. btn.onclick = function () {
  45. if (text.value == '') {
  46. alert('输入为空,不能发布');
  47. } else {
  48. var lili = document.createElement('li');
  49. ul.appendChild(lili);
  50. lili.innerHTML = text.value + "<a herf='javascript:;'>删除</a>";
  51. text.value = ''
  52. }
  53. ul.insertBefore(lili, ul.children[0]);
  54. var a = document.querySelectorAll('a');
  55. for (var i = 0; i < a.length; i++) {
  56. a[i].onclick = function () {
  57. ul.removeChild(ul.children[0])
  58. }
  59. }
  60. }
  61. </script>
  62. </body>
  63. </html>