Javascript $(这)抛出了“;“未定义”;但这一切都如愿 请考虑两段代码。
1) 按计划工作: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
$(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
会导致不必要的处理。