【问题标题】:Use jQuery .find() result as argument in callback function in chain使用 jQuery .find() 结果作为链中回调函数的参数
【发布时间】:2011-08-05 01:06:05
【问题描述】:

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

让我们拥有这个 HTML:

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

简单。

在 jQuery 中,我们为所有 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^));
 }

【问题讨论】:

  • doSomethingdoSomethingWithCallback是什么功能?你能举一些现实生活中的例子吗?
  • 我不太明白这个问题。您是否尝试将 .find() 的结果作为参数传递给另一个函数?
  • 添加了 doSomething IRL :)
  • 杰西:是的。也许子集不是正确的词,因为我基本上对 $(this) 中元素的子元素进行了另一个查询?
  • 你不能用.find('.foo').each(function(){$(this).animate(x,x, hide(this));});跨度>

标签: jquery find


【解决方案1】:

一般使用 jQuery 函数,你的 doSomethingWithCallback 会为 find() 的每次匹配执行多次,因此你的回调方法也会为每次匹配调用一次,所以传递一组元素是不必要的,使用 $ (这个)。

【讨论】:

  • 对不起...什么? $(this) 实际上包含完全不同的项目。而且我知道我的回调将被多次调用,这就是重点(尽管在我现在的实际情况中,我 100% 确定在 .find() 之后总是只有一项)
  • 那么您想在回调中获取 find() 返回的项目的完整子集吗?
  • 是的,我希望最后一个 .find() 查询返回的所有内容都用作我的回调中的参数 :)
  • 您需要先保存 find 的结果,或者在回调中执行另一个 find。根据要匹配的元素数量,它对性能并不是那么重要。只需将查找字符串传递给回调。另一种解决方案是修改 .animate 函数以调用传递接收到的查找结果的回调,您可以通过挂钩该函数来执行此操作,如果您对此感兴趣,我可以举个例子。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    你在寻找 jQuery 的

    end()

    ?

    如果您正在制作自己的插件,请查看 pushSack()end()

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

    【讨论】:

      猜你喜欢
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多