如何在JavaScript中使用它?

beg*_*ner 16 html javascript jquery dom javascript-events

在jQuery中我们使用:

$("p").click(function(){$(this).hide();});
Run Code Online (Sandbox Code Playgroud)

在上面的语句this中非常重要,因为它只隐藏了p我们单击的元素.但是,如果我们"p"this它的位置使用它将隐藏所有p元素,当我们点击任何一个p元素.

我想知道是否有任何方法可以使用JavaScript生成相同的效果.我试过了:

document.getElementsByTagName("p").onclick = function(){this.style.display:none;}
Run Code Online (Sandbox Code Playgroud)

document.getElementsByTagName("p").onclick = function(){document.getElementsByTagName(this).style.display:none;}
Run Code Online (Sandbox Code Playgroud)

但这一切都不起作用.

Mil*_*war 21

您需要遍历每个元素,然后使用它addEventListener来附加事件:

var allP = document.getElementsByTagName("p");
for(i=0; i< allP.length; i++) {
    allP[i].addEventListener('click', function () {
      this.style.display = "none";
    });
}
Run Code Online (Sandbox Code Playgroud)

工作演示

  • @Milind Anantwar:不推荐 - 你为什么这么认为? (4认同)
  • 或使用事件委托:) (2认同)

Mic*_*ski 9

正如Alex在评论中写道:

我想知道是否有任何方法可以使用JavaScript生成相同的效果.

不,它只适用于使用黑暗魔法的jQuery.

jQuery是滥用this.实际上它应该只在类中使用,而不是在回调中使用.

要使用本机DOM实现相同的效果:

现场演示

Array.from(document.querySelectorAll("p"))
  .forEach(el => el.addEventListener('click', () => el.style.display = 'none'))
Run Code Online (Sandbox Code Playgroud)
<p>Try clicking any of the paragraphs.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla purus metus, ullamcorper tempus augue interdum, efficitur vulputate lectus.</p>
<p>Vestibulum ullamcorper ultrices egestas.</p>
<p>Pellentesque volutpat, est ut convallis interdum, elit metus dapibus ex, non consectetur sem est et felis.</p>
Run Code Online (Sandbox Code Playgroud)

  • -1"实际上它应该只在类中使用,而不是在回调中使用".这个断言很重要*,非常不协调.在ES6之前,JavaScript甚至没有*类,而在函数上绑定`this`的能力总是*以*call`和`apply`存在. (4认同)
  • 事件处理程序很容易被视为DOM元素的*方法*,尤其是通过`.onclick =`附加时.在里面使用`this`会非常有意义. (2认同)
  • 当然不是.所以不要抱怨那些:-)顺便说一句,"方法"可以重复使用,不像箭头函数闭包需要在每次循环迭代中重新创建. (2认同)