javascript - 想要在单击元素时向该元素添加 CSS 类

标签 javascript

给定这个 HTML:

 <ul class="myList">
   <li class="List" data-pos="Noah">
      <label><input class="text">pass</label>
   </li>
   <li class="List" data-pos="Liam">
      <label><input class="text">fail</label>
   </li>
   <li class="List" data-pos="James">
      <label><input class="text">average</label>
  </li>
 </ul>

我想创建一个 JavaScript 函数,当用户单击该元素时,该函数将基于 data-pos 添加新类到该元素。元素的属性。

   click on "Noah"  add class Noah1
   click on "Liam"  add class Liam1
   click on "James" add class James1

点击所有元素后的预期结果:

 <ul class="myList">
   <li class="List Noah1" data-pos="Noah">
       <label><input class="text">pass</label>
   </li>
   <li class="List Liam1" data-pos="Liam">
       <label><input class="text">fail</label>
   </li>
   <li class="List James1" data-pos="James">
       <label><input class="text">average</label>
   </li>
 </ul>

我尝试了以下 JavaScript。结果是 <label class="null1">而不是<li class="List Noah1"><li class="List Liam1"><li class="List James1">

function clickEvent(event) {
    event.target.classList.add(event.target.getAttribute('data-pos') + "1")
    console.log(event.target.classList)
}

document.querySelector('ul').addEventListener('click', clickEvent, false);

最佳答案

您有嵌套元素。 Click 事件在内部元素 (label) 上触发,然后向上冒泡到 ul 元素。

如果 label 收到点击,您需要步进到父元素。

function clickEvent(event) {
  let element = event.target
  if(element.tagName === 'LABEL') {
    element = event.target.parentElement;
  }
  element.classList.add(element.getAttribute('data-pos') + "1")
  console.log(element.classList)
}

关于javascript - 想要在单击元素时向该元素添加 CSS 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66014256/

相关文章:

javascript - 匹配谷歌日历事件提要日期的正则表达式

JavaScript 失去焦点

javascript - 用按钮 (Drupal) 替换页面中的 CSS(或页面元素)

javascript - 将 JS Canvas 元素与另一个元素切换

javascript - 在 JavaScript 中,如何使用单个 ".prototype" block 从子类中继承父类?

javascript - 表单加载提交后重定向

javascript - 如何在函数内迭代数组对象

javascript - 从 JavaScript 中的函数参数中解构未知名称值

javascript - 未动态添加的项目列表

javascript - 如何从 JavaScript 通过 TCP 发送 OSC?