这是一个关于$(this)的简单问题,以及如何在一大块代码中定义和重新定义它。
$('input').live('click', function() {
$(this).addClass('active');
if( question.find('.false').is(':visible') ){
question.find('.false').hide("blind",{},350);
}
})
$(this)
明确地表示第二行的输入。现在,当我们开始if
语句时,我有一个新的兴趣点:question.find('.false')
。如果$(this)
未更改为新定义,是否有更简单的方式来引用question.find('.false')
?
如果我想在更长版本的循环中多次引用question.find('.false')
,那么引用它的最佳方法是什么?
在循环之前定义一个新变量:
var qfalse = question.find('.false')
if( qfalse...){...qfalse this, qfalse that...
还有别的吗?
答案 0 :(得分:1)
我想你正在寻找类似下面的东西?
$('input').live('click', function()
{
$(this).addClass('active');
var $target = question.find('.false');
if($target.is(':visible'))
{
$target.hide('blind', 350);
}
});
或者,如果你想真的想要,write a wee little jQuery plugin:
(function ($)
{
$.fn.hideIfVisible = function hideIfVisible()
{
if (this.is(':visible')) this.hide('blind', 350);
return this;
};
}($));
$('input').live('click', function()
{
$(this).addClass('active');
question.find('.false').hideIfVisible();
});
答案 1 :(得分:1)
this
将保留其值,直到某些新上下文重新定义this
(如.each()
回调中)。它在你的功能中无处不在。
你可以做你想做的事情更简单一些。而不是使用if
测试,只需要选择器可见,只对可见的选择器进行操作。
$('input').live('click', function() {
$(this).addClass('active');
question.find('.false:visible').hide("blind",{},350);
})
实际上,你可以在所有这些上调用hide,而.hide()
方法会忽略已经隐藏的那些。
$('input').live('click', function() {
$(this).addClass('active');
question.find('.false').hide("blind",{},350);
})
如果要在函数的多个位置使用相同的jQuery选择器对象,并且不能将多个方法链接在一起,那么您只需使用局部变量将选择器分配给然后使用该变量: / p>
$('input').live('click', function() {
$(this).addClass('active');
var $falseQuestions = question.find('.false');
// do whatever other operations you want on/with $falseQuestions here
$falseQuestions.hide("blind",{},350);
})