Javascript $(这)抛出了“;“未定义”;但这一切都如愿 请考虑两段代码。

Javascript $(这)抛出了“;“未定义”;但这一切都如愿 请考虑两段代码。,javascript,jquery,Javascript,Jquery,1) 按计划工作: $(function(){ $('.menu li').on('click', function(){ var choice = document.getElementById("choice"); var text = this.textContent; choice.textContent = text; }); }); 2) 在这种情况下,$(this)抛出“未定义” 很长一段时间以来,我一直使用$(this

1) 按计划工作:

  $(function(){
    $('.menu  li').on('click', function(){
    var choice = document.getElementById("choice");
    var text = this.textContent;
      choice.textContent = text;
    });
     });
2) 在这种情况下,
$(this)
抛出“未定义”

很长一段时间以来,我一直使用
$(this)
作为对所选元素的引用。但今天它失败了。发生了什么?我是否应该忘记
$(这个)
,不再在几行简单的代码中面对这样的情况

$()是jQuery构造函数函数

但这是对调用的DOM元素的引用


$(this),您只是将this作为参数传入$(),以便可以调用jQuery方法和函数。

.textContent
不是jQuery属性或方法。这就是为什么作为jQuery元素的
$(This)
没有它的原因

您可以使用
$(this)[0]
从jQuery元素中获取实际的DOM属性,如下所示:

var text = $(this)[0].textContent;
var text = $(this).text();
但是,
$(this)[0]
相当于
this
,因此在该特定示例中这样做没有意义。这在其他情况下可能有意义——例如,如果您将jQuery元素作为函数参数:

function set_text(jqElem,txt) { jqElem[0].textContent = txt; }
您还可以使用
.text()
获取或设置元素的文本内容,如下所示:

var text = $(this)[0].textContent;
var text = $(this).text();

您应该使用:
var text=$(this.text():)我是否可以假设,如果有人忘记了DOM属性和jQuery方法之间的区别,那么使用this vs$(this)作为DOM方法是避免混淆的最佳方法?@Бааааааааааааааа1072。原因是jQuery元素在许多情况下更易于使用。但是,当一个简单的DOM属性可用于某些东西时,比如
.textContent
,使用它比将元素包装为jQuery元素要快得多。在本例中,应该使用
this.textContent
,因为用
$(this)
包装
this
会导致不必要的处理。