查找此元素内的文本

Finding the text inside this element

我想做一个相当简单的操作:你点击一个 li,你得到里面的文本,使用 JavaScript(不是 JQuery)。我无法弄清楚(或找出)的是如何获得 innerHTML

function enable() {
  document.addEventListener('click', e => {
    if (e.target.classList.contains('refine-menu-li')) {
      var selected = this.innerHTML;
      console.log('stuff'); // Working
      console.log(selected); // Not working
    } 
  });
}

问题是我正在使用 class 并因此需要 for 循环吗?还是 this 尝试和使用是一件愚蠢的事情?

谢谢!

箭头函数从它们声明的上下文中捕获 this

this.innerHTML 不是您要查找的innerHTML

你可能想要 e.target.innerHTML.


如果您没有使用箭头函数,那么 this 将不是您想要的值。事件处理程序在它们绑定到的元素的上下文中调用(document 在这种情况下),而不是触发事件的元素。

试试这个

function enable() {
  document.addEventListener('click', e => {
    
    var current = e.target;
    
    if (e.target.classList.contains('refine-menu-li')) {
      var selected = current.innerHTML;
      console.log('stuff'); // Working
      console.log(selected); // Not working
    } 
  });
}

enable();
<ul>
  <li class='refine-menu-li a'>1 </li>
  <li class='refine-menu-li b '>2</li>
  <li class='refine-menu-li c '>3</li>
  <li class='refine-menu-li d'>4</li>
</ul>

您可以尝试这样的操作,而不使用箭头函数:

 document.getElementById("js-list")
         .addEventListener("click",function(e) {
            if(e.target && e.target.nodeName == "LI") {
              console.log(e.target.innerHTML);
            }
         });
<ul id="js-list">
   <li>value1</li>
   <li>value2</li>
   <li>value3</li>
</ul>