01.类的操作.html 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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>Document</title>
  8. <Style>
  9. .b1 {
  10. width: 100px;
  11. height: 100px;
  12. background-color: red;
  13. }
  14. .b2 {
  15. height: 200px;
  16. background-color: yellow;
  17. }
  18. </Style>
  19. <script>
  20. window.onload = function () {
  21. //获取box
  22. var box = document.getElementById('box');
  23. //获取btn01
  24. var btn01 = document.getElementById('btn01');
  25. //为btn01绑定单击响应函数
  26. btn01.onclick = function () {
  27. //修改box的样式
  28. /**
  29. * 通过style属性来修改元素的样式,每修改一个样式,浏览器就需要重新渲染
  30. * 一次页面,这样的执行的性能是比较差的,而且这种形式当我们要修改多个
  31. * 样式时,也不太方便
  32. * */
  33. // box.style.width = '200px';
  34. // box.style.height = '200px';
  35. // box.style.backgroundColor = 'yellow';
  36. /**
  37. * 我们希望一行代码,可以同时修改多个样式
  38. */
  39. //修改box的class属性
  40. /**
  41. * 我们可以通过修改元素的class属性来间接的修改样式
  42. * 这样一来,我们只需要修改一次,就可以同时修改多个样式,
  43. * 此时浏览器只需要重新渲染页面一次,性能比较好,
  44. * 并且这种方式可以使表现和行为进一步的分离
  45. */
  46. // box.className = 'b2';
  47. // box.className += ' b2';//注意b2前需要加一个空格
  48. // addClass(box, 'b2');
  49. // alert(hasClass(box,'b2'));
  50. // removeClass(box,'b2');
  51. toggleClass(box,'b2');
  52. };
  53. };
  54. //定义一个函数,用来向一个元素中添加指定的class属性值
  55. /**
  56. * 参数:
  57. * obj:要添加class属性的元素
  58. * cn:要添加的class值
  59. */
  60. function addClass(obj, cn) {
  61. //检查obj中是否含有cn
  62. if(!hasClass(obj,cn)){
  63. obj.className += ' ' + cn;
  64. }
  65. // obj.className += ' ' + cn;//单引号内是一个空格,必须要输入,否则会报错
  66. };
  67. /**
  68. * 判断一个元素中是否含有指定的class值
  69. * 如果有该class,则返回true,没有则返回false
  70. *
  71. */
  72. function hasClass(obj, cn) {
  73. //判断obj中有没有cn class
  74. // return obj.className == cn;
  75. //创建一个正则表达式
  76. // var reg = /\bb2\b/;//这种方式把数据写死了
  77. // return reg.test(obj.className);
  78. var reg = RegExp('\\b'+cn+'\\b');
  79. // alert(reg);
  80. return reg.test(obj.className);
  81. };
  82. /**
  83. * 删除一个元素中的指定的class属性
  84. */
  85. function removeClass(obj,cn){
  86. //创建一个正则表达式
  87. var reg = RegExp('\\b'+cn+'\\b');
  88. //删除class
  89. obj.className = obj.className.replace(reg,'');
  90. };
  91. /**
  92. * toggleClass可以用来切换一个类
  93. * 如果元素中具有该类,则删除
  94. * 如果元素中没有该类,则添加
  95. */
  96. function toggleClass(obj,cn){
  97. //判断obj中是否含有cn
  98. if(hasClass(obj,cn)){
  99. //有,删除
  100. removeClass(obj,cn);
  101. }else{
  102. //没有,则添加
  103. addClass(obj,cn);
  104. }
  105. };
  106. </script>
  107. </head>
  108. <body>
  109. <button id="btn01">点击按钮以后修改box样式</button>
  110. <br /><br />
  111. <div id="box" class="b1"></div>
  112. </body>
  113. </html>