1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> #buttons>button { border: none; outline: none; width: 120px; height: 40px; font: 22px/40px Arial; background-color: red; color: white; margin-top: 20px; } </style> </head> <body> <div id="buttons"> <button><input type="checkbox">苹果</button> <button><input type="checkbox">香蕉</button> <button><input type="checkbox">草莓</button> <button><input type="checkbox">蓝莓</button> <button><input type="checkbox">榴莲</button> <button><input type="checkbox">西瓜</button> <button><input type="checkbox">芒果</button> <button><input type="checkbox">柠檬</button> </div> <script> var buttons = document.querySelectorAll('#buttons>button'); for (var i = 0; i < buttons.length; i += 1) { buttons[i].firstChild.addEventListener('click', function(evt) { var checkbox = evt.target || evt.srcElement; if (checkbox.checked) { checkbox.parentNode.style.backgroundColor = 'lightseagreen'; } else { checkbox.parentNode.style.backgroundColor = 'red'; } evt.stopPropagation(); }); buttons[i].addEventListener('click', function(evt) { // 通过事件对象的target属性可以获取事件源(谁引发了事件) // 但是有的浏览器是通过srcElement属性获取事件源的 // 可以通过短路或运算来解决这个兼容性问题 var button = evt.target || evt.srcElement; // 当获取到一个元素之后可以通过它的属性来获取它的父元素、子元素以及兄弟元素 // parentNode - 父元素 // firstChild / lastChild / children - 第一个子元素 / 最后一个子元素 / 所有子元素 // previousSibling / nextSibling - 前一个兄弟元素 / 后一个兄弟元素 var checkbox = button.firstChild; checkbox.checked = !checkbox.checked; if (checkbox.checked) { button.style.backgroundColor = 'lightseagreen'; } else { button.style.backgroundColor = 'red'; } }); } </script> </body> </html>
|