example_of_js_6.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. * {
  8. margin: 0;
  9. padding: 0;
  10. }
  11. #fruits {
  12. width: 120px;
  13. margin: 20px 20px;
  14. }
  15. #fruits>li {
  16. list-style-type: none;
  17. height: 40px;
  18. color: white;
  19. background-color: #009966;
  20. line-height: 40px;
  21. text-align: center;
  22. margin-top: 2px;
  23. }
  24. #fruits>li>a {
  25. float: right;
  26. color: white;
  27. text-decoration: none;
  28. }
  29. #fruits~input {
  30. border: none;
  31. outline: none;
  32. text-align: center;
  33. margin: 20px 15px;
  34. }
  35. input[type=text] {
  36. border-bottom: 1px solid gray !important;
  37. }
  38. #ok {
  39. width: 80px;
  40. height: 30px;
  41. background-color: #CC3333;
  42. color: white;
  43. }
  44. </style>
  45. </head>
  46. <body>
  47. <div id="container">
  48. <ul id="fruits">
  49. <li>苹果<a href="">×</a></li>
  50. <li>香蕉<a href="">×</a></li>
  51. <li>火龙果<a href="">×</a></li>
  52. <li>西瓜<a href="">×</a></li>
  53. </ul>
  54. <input type="text" name="fruit">
  55. <input id="ok" type="button" value="确定">
  56. </div>
  57. <script>
  58. function addListItem() {
  59. let name = input.value.trim()
  60. if (name) {
  61. // 通过document对象的createElement方法创建新元素
  62. let li = document.createElement('li')
  63. // 可以用textContent或innerHTML属性来修改标签的内容
  64. li.innerHTML = name
  65. let a = document.createElement('a')
  66. a.innerHTML = '&times;'
  67. a.href = ''
  68. a.addEventListener('click', removeListItem)
  69. li.appendChild(a)
  70. // 通过父元素的appendChild或insertBefore可以添加子元素
  71. ul.appendChild(li)
  72. input.value = ''
  73. // 元素的focus和blur方法可以让元素获得或失去焦点
  74. input.focus()
  75. }
  76. }
  77. function removeListItem(evt) {
  78. // evt.stopPropagation()
  79. // 通过事件对象的preventDefault方法阻止事件的默认行为
  80. evt.preventDefault()
  81. // 通过元素获取父元素 - parentNode
  82. // 通过元素获取子元素 - children / firstElementChild / lastElementChild
  83. // 通过元素获取兄弟元素 - previousElementSibling / nextElementSibling
  84. let li = evt.target.parentNode
  85. // 通过父元素的removeChild方法可以删除指定的子元素
  86. ul.removeChild(li)
  87. }
  88. const ul = document.querySelector('#fruits')
  89. const input = ul.nextElementSibling
  90. input.addEventListener('keypress', (evt) => {
  91. let code = evt.keyCode || evt.which
  92. if (code == 13) {
  93. addListItem()
  94. }
  95. })
  96. const ok = input.nextElementSibling
  97. ok.addEventListener('click', addListItem)
  98. let anchors = document.querySelectorAll('#fruits>li>a')
  99. for (let i = 0; i < anchors.length; i += 1) {
  100. // addEventListener方法有三个参数
  101. // 第一个参数是事件的名称,例如: click / dbclick / mouseover / mouseout
  102. // 第二个参数是事件发生时要执行的回调函数,函数的参数是事件对象:
  103. // ~ 传入一个已有函数的名字
  104. // ~ 写一个匿名函数 function(evt) {}
  105. // ~ 写一个箭头函数 (evt) => {}
  106. // 第三个参数表示使用事件捕获还是事件冒泡,如果不写表示事件冒泡(从里向外传播事件)
  107. // ~ 如果设置为true表示事件捕获(从外向里传播事件)
  108. // ~ 如果希望阻止事件的传播行为可以调用事件对象的stopPropagation方法
  109. anchors[i].addEventListener('click', removeListItem)
  110. }
  111. </script>
  112. </body>
  113. </html>