Blogger Information
Blog 48
fans 0
comment 0
visits 34361
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS的获取元素和事件操作(0813)
丶久而旧之丶
Original
861 people have browsed it

JS的DOM操作和事件

节点

  1. // 1.文档节点
  2. console.log(document);
  3. // 节点三要素
  4. // 节点类型
  5. console.log(document.nodeType);
  6. // 节点名称
  7. console.log(document.nodeName);
  8. // 节点的值
  9. console.log(document.nodeValue);
  10. // 查看文档类型
  11. console.log(document.doctype);
  12. // 查看根节点(html)
  13. console.log(document.documentElement);
  14. // 查看头节点
  15. console.log(document.head);
  16. // 查看标题
  17. console.log(document.title);
  18. // 查看主体
  19. console.log(document.body);
  20. // 操作节点
  21. document.body.style.backgroundColor = 'lightgreen';

获取元素

  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>DOM操作</title>
  7. </head>
  8. <body>
  9. <div id='container'>
  10. <ul class='poster' name='poster'>
  11. <li name='active'>上午学习PHP</li>
  12. <li>下午学习JAVA</li>
  13. <li>晚上学习CSS</li>
  14. </ul>
  15. </div>
  16. <script>
  17. // 获取元素
  18. // 1.根据标签获取(返回一个对象集合)
  19. var ul = document.getElementsByTagName('ul');
  20. console.log(ul);
  21. // 返回的是一个对象集合要获取其中某个需要通过键获取
  22. console.log(ul[0]);
  23. console.log(ul.item(0));
  24. // 2.根据id获取(因为html中的id唯一性是人为遵守的,所以是返回具有指定id的第一个元素)
  25. var div = document.getElementById('container');
  26. console.log(div);
  27. // 也可以在对象集合中获取具有指定名称的元素
  28. console.log(ul.namedItem('poster'));
  29. // 获取指定的一个<li>
  30. var li = document.getElementsByTagName('li').namedItem('active');
  31. li.style.color = 'lightgreen';
  32. // 也可以在元素级别调用方法
  33. var li1 = ul.item(0).getElementsByTagName('li');
  34. console.log(li1);
  35. // 3.根据class获取(和标签一样返回对象集合)
  36. var ul1 = document.getElementsByClassName('poster');
  37. console.log(ul1);
  38. ul1.item(0).style.border = '2px solid lightblue';
  39. // 4.使用queryselector方法(推荐)参数为CSS选择器
  40. // querySelector()返回满足条件的第一个元素
  41. var li2 = document.querySelector('#container li');
  42. console.log(li2);
  43. // 获取第二个<li>
  44. var li3 = document.querySelector('li:nth-of-type(2)');
  45. console.log(li3);
  46. // querySelmectorAll()返回满足条件的元素集合(可以看做数组使用但是上面返回的对象集合不能)
  47. var lis = document.querySelectorAll('.poster>li');
  48. console.log(lis);
  49. lis.item(1).style.backgroundColor = 'lightcoral';
  50. </script>
  51. </body>
  52. </html>

NodeList

  1. // NodeList
  2. var div = document.querySelector('.act');
  3. // 打印节点数
  4. console.log(div.childNodes);
  5. // 文档中的换行,回车都是文本节点(nodeType === 3)
  6. console.log(div.childNodes.item(0).nodeType);
  7. // 元素节点(nodeType === 1)
  8. console.log(div.childNodes.item(1).nodeType);
  9. // 对于节点过滤
  10. for (var i = 0; i < div.childNodes.length; i++) {
  11. var cuName = div.childNodes.item(i);
  12. if (cuName.nodeType === 1) {
  13. console.log(cuName.tagName.toLowerCase());
  14. }
  15. }
  16. // 也可以通过children直接返回元素节点
  17. console.log(div.children);
  18. // 获取元素子节点
  19. console.log(div.firstElementChild);//第一个子节点
  20. console.log(div.children.item(1));//第二个子节点
  21. console.log(div.lastElementChild);//最后一个子节点
  22. // 获取父节点
  23. var p = document.querySelector('p');
  24. console.log(p.parentNode);

元素添加

  1. // 元素动态添加
  2. // 1.创建元素
  3. var p = document.createElement('p');
  4. // 2.设置元素样式或内容
  5. p.innerHTML = '<span style="color:lightcoral">JavaScript</span>真好玩';
  6. // 3.添加到页面中,必须在父节点上面添加
  7. document.querySelector('.item').appendChild(p);
  8. // 添加多个元素
  9. for (var i = 0; i < 5; i++) {
  10. var li = document.createElement('li');
  11. li.innerHTML = '列表项' + (i + 1);
  12. document.querySelector('.tain').appendChild(li);
  13. }
  14. // 上面方式建议不使用因为每添加一次页面就会渲染一次(可以把元素放在片段中最后一次性添加到页面中)
  15. var frag = document.createDocumentFragment();
  16. for (var a = 0; a < 5; a++) {
  17. var li1 = document.createElement('li');
  18. li1.innerHTML = '<span style="color:lightpink">列表项' + (a + 6) + '<span>';
  19. frag.appendChild(li1);
  20. }
  21. // 最后把片段添加到页面中
  22. document.querySelector('.tain').appendChild(frag);

事件

  1. // 事件
  2. // 先获取按钮
  3. var btn = document.querySelector('button');
  4. console.log(btn);
  5. // 绑定事件
  6. btn.addEventListener('mouseover', function (ev) {
  7. // ev.target为事件的触发者
  8. ev.target.style = 'width:80px;height:80px;background:lightpink;outline:lightpink groove 8px;border:none;font-size:150%';
  9. })
  10. // 取消元素的默认行为
  11. // 获取a连接(document.links可以获取文档所有连接)
  12. var a = document.links.item(0);
  13. a.onclick = function (ev) {
  14. // 禁用a标签的默认行为
  15. ev.preventDefault();
  16. btn.style = null;
  17. };
  18. var div = document.querySelector('.container');
  19. div.addEventListener('mouseover', function (ev) {
  20. ev.target.style = 'border-radius:40px;width:200px; transition:all 0.5s ease-out';
  21. })
  22. div.addEventListener('mouseout', function (ev) {
  23. ev.target.style = null;
  24. ev.target.style = 'transition:0.5s ease-out';
  25. })

ToDoList

  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>todolist</title>
  7. <style>
  8. .status {
  9. display: none;
  10. }
  11. .item {
  12. width: 400px;
  13. overflow: hidden
  14. }
  15. .act1 {
  16. float: right;
  17. padding-left: 5px;
  18. box-sizing: border-box;
  19. background-color: lightseagreen;
  20. border-radius: 10px;
  21. clear: both;
  22. line-height: 1.5;
  23. }
  24. .action {
  25. float: left;
  26. box-sizing: border-box;
  27. background-color: lightblue;
  28. padding-left: 5px;
  29. border-radius: 10px;
  30. line-height: 1.5;
  31. clear: both;
  32. }
  33. li {
  34. list-style: none;
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <form action='' name='comment' method='POST'>
  40. <label for="content">请留言:</label>
  41. <input type='text' name='content' id='content'>
  42. <button>提交</button>
  43. <div class='item'>
  44. <ul></ul>
  45. </div>
  46. </form>
  47. <ul></ul>
  48. <div class="status">对方正在输入...</div>
  49. <script>
  50. // 获取表单
  51. var form = document.forms['comment'];
  52. // 获取ul
  53. var ul = document.querySelector('ul');
  54. // 获取div
  55. var div = document.querySelector('.status');
  56. // 问题和回答数组
  57. var arrq = ["你好", "你叫什么", "你几岁了", "你叫什么", "你在哪里"];
  58. var arra = ["你好哇", "我是小姐姐呀", "你问这个干什么", "嘤嘤酱", "我在你的内心深处"];
  59. // 绑定事件
  60. form.addEventListener('submit', function (ev) {
  61. // 禁用表单的默认行为
  62. ev.preventDefault();
  63. // 获取input的值
  64. var val = form.content.value.trim();
  65. // 判断input是否为空
  66. if (val.length != 0) {
  67. // 创建li
  68. var li = document.createElement('li');
  69. // 设置li内容
  70. li.innerHTML = val;
  71. // 给li设置class
  72. li.className = 'act1';
  73. // 把li添加到页面中
  74. ul.appendChild(li);
  75. // 添加完input清空并重新获取焦点
  76. form.content.value = "";
  77. form.content.focus();
  78. // 显示div
  79. div.style.display = "block";
  80. var vel = " ";
  81. // 获取问题数组的索引
  82. var index = arrq.indexOf(val);
  83. // 判断问题是否在问题数组中
  84. if (index >= 0) {
  85. // 存在则赋值
  86. vel = arra[index];
  87. } else {
  88. vel = '对不起回答不了您的问题';
  89. }
  90. // 创建回答li
  91. var ali = document.createElement('li');
  92. // 给回答li设置内容
  93. ali.innerHTML = vel;
  94. // 设置回答时间
  95. setTimeout(function () {
  96. ul.appendChild(ali);
  97. ali.className = "action";
  98. div.style.display = "none";
  99. }, 1000);
  100. } else {
  101. alert("内容不能为空!");
  102. form.content.value = "";
  103. form.content.focus();
  104. }
  105. });
  106. </script>
  107. </body>
  108. </html>

总结

1.了解了js的DOM操作和事件绑定
2.还需多敲代码熟记,编辑器没有提示时都不知怎么写了

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:多写就好了, 没啥技巧
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post