image.png

  1. var oList=document.createElement('ul'),
  2. oFrag=document.createDocumentFragment();//文档碎片 暂存的容器
  3. for(var i=0;i<50;i++){
  4. var oLi=document.createElement('li');
  5. oLi.innerHTML='这是第'+(i+1)+'项<button>删除</button>';
  6. oFrag.appendChild(oLi);
  7. }
  8. oList.appendChild(oFrag);
  9. document.body.appendChild(oList);
  1. var oList=document.createElement('ul'),
  2. list='';
  3. for(var i=0;i<50;i++){
  4. var oLi=document.createElement('li');
  5. list+='<li>这是第'+(i+1)+'项<button>删除</button></li>';
  6. }
  7. oList.innerHTML=list;
  8. document.body.appendChild(oList);

模板写法好,比字符串好,字符串没有代码提示,没有写html的提示

  1. <script type="text/html" id="tpl">
  2. <li>这是第{{num}}项<button>删除</button></li>
  3. </script>
  4. <script>
  5. var oList=document.createElement('ul'),
  6. tpl=document.getElementById('tpl').innerHTML,
  7. list='';
  8. for(var i=0;i<50;i++){
  9. list+=tpl.replace(/{{(.*?)}}/,(i+1));
  10. }
  11. oList.innerHTML=list;
  12. document.body.appendChild(oList);
  13. </script>

事件代理

事件代理->多次重复的绑定事件处理函数

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. <style>
  9. .box{
  10. width: 200px;
  11. height: 200px;
  12. background-color: orange;
  13. }
  14. .inner{
  15. width: 100px;
  16. height: 100px;
  17. background-color: green;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <div class="box">
  23. <div class="inner"></div>
  24. </div>
  25. <script>
  26. //事件代理->多次重复的绑定事件处理函数
  27. //事件对象和事件源对象 ->事件代理的核心
  28. document.getElementsByClassName('inner')[0].onclick=function(){
  29. console.log('inner');
  30. }
  31. document.getElementsByClassName('box')[0].onclick=function(){
  32. console.log('box');
  33. }
  34. </script>
  35. </body>
  36. </html>

点击box子元素,打印inner、box
点击inner,只打印inner
image.png

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. <style>
  9. .box{
  10. width: 200px;
  11. height: 200px;
  12. background-color: orange;
  13. }
  14. .inner1{
  15. width: 100px;
  16. height: 100px;
  17. background-color: green;
  18. }
  19. .inner2{
  20. width: 100px;
  21. height: 100px;
  22. background-color: purple;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div class="box">
  28. <div class="inner1"></div>
  29. <div class="inner2"></div>
  30. </div>
  31. <script>
  32. //事件代理->多次重复的绑定事件处理函数
  33. //事件对象和事件源对象 ->事件代理的核心
  34. // document.getElementsByClassName('inner1')[0].onclick=function(){
  35. // console.log('inner1');
  36. // }
  37. // document.getElementsByClassName('inner2')[0].onclick=function(){
  38. // console.log('inner2');
  39. // }
  40. // document.getElementsByClassName('box')[0].onclick=function(){
  41. // console.log('box');
  42. // }
  43. //这三个代码,相当于下面一个代码
  44. document.getElementsByClassName('box')[0].onclick=function(e){
  45. var e=e||window.event,
  46. tar=e.target||e.srcElement,
  47. className=tar.className;
  48. console.log(className)
  49. // switch (className) {
  50. // case 'inner1':
  51. // console.log('我是inner1');
  52. // break;
  53. // case 'inner2':
  54. // console.log('我是inner2');
  55. // break;
  56. // default:
  57. // break;
  58. // }
  59. }
  60. </script>
  61. </body>
  62. </html>

event参数

e是event事件对象,无论起什么名字,即使是abc都是事件对象,对象的属性作用,与对象的名字无关,最好起有意义的,如e、ev、event
image.png
image.png
image.png

事件代理完成任务

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. </head>
  9. <body>
  10. <script type="text/html" id="tpl">
  11. <li>这是第{{num}}项<button>删除</button></li>
  12. </script>
  13. <script>
  14. var oList=document.createElement('ul'),
  15. tpl=document.getElementById('tpl').innerHTML,
  16. list='';
  17. for(var i=0;i<50;i++){
  18. list+=tpl.replace(/{{(.*?)}}/,(i+1));
  19. }
  20. oList.innerHTML=list;
  21. document.body.appendChild(oList);
  22. //事件冒泡 一定是在父函数上绑定
  23. oList.addEventListener('click',removeItem,false);
  24. function removeItem(ev){
  25. var e=ev||window.event,
  26. tar=e.target||e.srcElemnt,
  27. tagName=tar.tagName.toLowerCase();//得到的BUTTON是大写,最好需要转化成小写
  28. if(tagName==='button'){
  29. tar.parentNode.remove();
  30. }
  31. }
  32. //事件代理->多次重复的绑定事件处理函数
  33. </script>
  34. </body>
  35. </html>