Javascript 在jQuery中标识$(this)
找出jQuery中当前的Javascript 在jQuery中标识$(this),javascript,jquery,this,Javascript,Jquery,This,找出jQuery中当前的$(this)等于什么的最佳方法是什么 例如警报(此)没有多大帮助 我问这个问题的原因是,在我将代码移动到函数中之后,一段代码当前没有执行它应该执行的操作 下面的摘录现在在一个函数中,$(this)现在似乎是指DOMWindow if($(this).hasClass('open')) { alert('I should be closed'); $(this).removeClass('open').addClass('closed'); $
$(this)
等于什么的最佳方法是什么
例如警报(此)代码>没有多大帮助
我问这个问题的原因是,在我将代码移动到函数中之后,一段代码当前没有执行它应该执行的操作
下面的摘录现在在一个函数中,$(this)现在似乎是指DOMWindow
if($(this).hasClass('open'))
{
alert('I should be closed');
$(this).removeClass('open').addClass('closed');
$(this).parents('article').css('border', '1px solid red').animate({'width': '212px'}, 100, "linear", function() {
run_masonry();
});
}
else
{
alert('I should be open');
$(this).removeClass('closed').addClass('open');
$(this).parents('article').css('border', '1px solid blue').animate({'width': '646px'}, 100, "linear", function() {
run_masonry();
});
}
我如何将其保持为$(this)作为原始单击元素
找出jQuery中当前的$(this)
等于什么的最佳方法是什么
通过将其记录到您最喜欢的javascript调试工具(例如Chrome developer工具栏)的控制台:
它将返回jQuery包装的对象。如果您想了解有关本机对象的更多信息,可以使用:
console.log(this);
如果您正在进行javascript开发,那么应该使用javascript调试工具<代码>警报
不是这样的工具
既然您已经用一些代码源更新了您的问题,那么您似乎正在全局范围内使用
$(this)
。然后它将引用窗口
对象。如果希望它引用某个单击的元素或其他内容,则必须首先订阅。单击事件:
$('.someSelector').click(function() {
// here $(this) will refer to the original element that was clicked.
});
或者,如果您希望在单独的函数中外部化此代码:
function foo() {
// here $(this) will refer to the original element that was clicked.
}
$('.someSelector').click(foo);
或:
将代码移动到函数中通常会改变代码的范围。因此,“this”将不再指原始对象,而是指新对象(或全局“window”对象)。如果您向我们展示您的代码,我们将能够识别问题。我怀疑您会这样做:
$('#element').click(function() {
clickHandler();
});
在这种情况下,将在窗口对象上下文中调用clickHandler
。要保留正确的上下文,只需将代码更改为:
$('#element').click(clickHandler);
如果您想检查传递的内容,可以使用我的版本或Prinzorn的jquerylog版本。它应该帮助您逐步确定发生了什么: / 对于类似以下情况的呼叫:
$("#foo").parents(".t1").next().prev().parent().find(".t2:last .t4:last").text("test");
您将得到如下输出(在每个步骤中标识div:
$('#foo'): [<div id="foo" class="t3"></div>]
parents('.t1'): [ <div class="t1">…</div> ]
next(undefined): [ <div class="t1">…</div> ]
prev(undefined): [ <div class="t1">…</div> ]
parent(undefined): [ <body>…</body> ]
find('.t2:last .t4:last'): [<div class="t4">teste</div>]
$('foo'):[]
父母('.t1'):[…]
下一个(未定义):[…]
上一个(未定义):[…]
父项(未定义):[…]
查找('.t2:last.t4:last'):[teste]
是否有办法缩小范围?这会返回大量数据。@CraigWard,是的,使用控制台.log(this);
只记录本机对象,而不记录$(this)
@CraigWard您希望缩小范围到什么程度?我希望它是$(this).attributesThatIWantToSee()
它正在返回DOMWindow,这是100个子对象。这正常吗?@CraigWard那么这个
很可能是窗口
,这意味着您在某个地方遇到了函数上下文问题。这听起来像是问题。它正在返回DOMWindow。在函数中有没有办法保持$(这个)?
$("#foo").parents(".t1").next().prev().parent().find(".t2:last .t4:last").text("test");
$('#foo'): [<div id="foo" class="t3"></div>]
parents('.t1'): [ <div class="t1">…</div> ]
next(undefined): [ <div class="t1">…</div> ]
prev(undefined): [ <div class="t1">…</div> ]
parent(undefined): [ <body>…</body> ]
find('.t2:last .t4:last'): [<div class="t4">teste</div>]