使用jQuery .find()结果作为链中回调函数的参数

时间:2011-08-05 01:06:06

标签: jquery find

我有这个问题(现在是吗​​?):

我们有这个HTML:

<div>
 <p></p>
 <p id="bar"></p>
</div>
<div>
 <p id="foo"></p>
 <p id="baz"></p>
</div>

简单。

在jQuery中,我们将函数(例如“click”)添加到所有div:

$('div').click(function(){
  $(this).doSomething($(this))
  .find('#baz')
    .doSomethingWithCallback ({args}, callbackFunction($FIND_RESULT) );
});

显然,变量$ FIND_RESULT不存在 - 我想知道如何获得最后一次.find()查询的结果?

有什么办法,或者我是否必须打破我的疯狂链(或重复$(this).find()作为参数)?

修改:IRL示例:

function hide($div) { $div.css({'display': 'none'});

function ...
  $(this)
    .anyFunction()
  .find('.foo')
    .animate({opacity: 0}, 250, hide(^that^));
 }

3 个答案:

答案 0 :(得分:1)

通常使用jQuery函数,对于find()的每个匹配,doSomethingWithCallback将被执行多次,因此每次匹配也会调用一次回调方法,因此传递元素集是必要的,使用$ (本)。

答案 1 :(得分:0)

我也有点困惑。 .find()方法非常健壮,所有其他jQuery函数也是如此。每个元素都在一组元素上执行,然后将这些元素传递回来,以便其他函数可以在它们上链接。 http://jsfiddle.net/rkw79/DXbXU/

在自定义函数上,处理它们后是否返回对象? http://docs.jquery.com/Plugins/Authoring#Maintaining_Chainability

答案 2 :(得分:0)

你在寻找jQuery的

end()

吗?

如果你自己制作插件,请查看pushSack()end()

function ...
  $(this)
    .anyFunction()
  .find('.foo')
  .end()  // <---
    .animate({opacity: 0}, 250, hide(^that^));
 }