好的,我知道它的实际含义是什么$(this)
,并且this
是朝着什么方向发展的。但是我正在做一个小项目,我试图将我拥有的一些重复代码整合到可重用的函数中。
有了它,我有一个函数,我想在同一个父 div 中为它下面的特定对象设置动画。哪个有效,这已确认。但是,我有两个事件希望从当前触发。
一个是加载事件,.ready()
我在符合此要求的元素上运行一个$.each()
循环,并且效果很好。将有问题的元素传递给我使用的函数
$(this)
单独作为函数的参数,函数采用该参数并根据该项目的规范对其进行处理。但是,问题出在哪里是我想用来触发此功能的第二个事件。
这是基于每个元素的基于点击的事件。因为我已经尝试过.click()
,它们中.live()
似乎是唯一能识别物体的东西。我目前在这个项目上坚持使用 jQuery 1.4.4。所以对我来说不可用,否则我也会尝试。我也很困惑为什么或不会工作,尽管元素使用 DOM 渲染,但是这与我目前正在寻找的完全不同。.delegate()
live()
.on()
delegate()
click()
live()
底线是,我在这个工作示例中通过前面提到的循环调用我的函数的方式:
$('.panels h3').each(function()
{
accordionUpDown($(this), false);
});
这个基于点击的示例不起作用,但人们会认为它应该但它没有。
$('.panels h3').live('click',function()
{
accordionUpDown($(this), true);
});
这里也供参考的是函数本身:
function accordionUpDown(theElem, fx)
{
//alert('test'+theElem);
if(theElem.hasClass('active'))
{
var $elem = theElem.next('div');
var elemY = ($elem.children('div').innerHeight()+2);
if(fx == false)
{
$elem.addClass('active').css({height:elemY+'px'});
}
else
{
$elem.addClass('active').animate({height:elemY+'px'}, 2000);
}
}
if(!theElem.hasClass('active'))
{
var $elem = theElem.next('div');
var elemY = '0px';
if(fx == false)
{
$elem.css({height:elemY}).removeClass('active');
}
else
{
$elem.animate({height:elemY}, 2000).removeClass('active');
}
}
}
现在为了节省你们这些人的时间,问我为什么不直接使用类似 jQuery UI 的东西来获得相同的效果,那么简单地说它是一个样式问题,以及一旦这些功能正确就位后计划的一些其他功能。无论哪种情况,定制需求都超越了简单的概念。
无论如何,在点击的情况下,我开始怀疑是否$(this)
以某种方式拾取了错误的东西,如果是,那么它可能没有按预期工作,所以如果是这样的话,我试图弄清楚我是如何可以找到$(this)
实际上是哪个元素
快速编辑,对于那些想要看到这一切的人,我制作了一个小提琴版本。 http://jsfiddle.net/sDeq2/也包含 HTML 部分