2012-02-20 61 views
1

我使用jQuery链的功能写了这个功能来切换类的名字,旁边的div,但它doen't工作...jQuery的链接功能问题

$('a.back-btn,a.front-btn').click(function(e){ 
     e.preventDefault(); 
     $(this).toggleClass('back-btn front-btn').end() 
     .next().find('.models').toggleClass('rotated'); 
}) 

的情况下,如果我写单独的行,然后它工作正常:

$('a.back-btn,a.front-btn').click(function(e){ 
      e.preventDefault(); 
      $(this).toggleClass('back-btn front-btn'); 
      $(this).next('.models').toggleClass('rotated'); // separate line 
     }) 

什么是我的链接功能,这需要怎么结束时的处理,如果我使用链接的问题。我用end(),是不是错误?任何使用end()的最佳说明?

在此先感谢

+0

你的两段代码不相同。 '$(this).next('。models')'返回'this'后面的元素,如果它具有'models'类的话。 '$(this).next()。find('。models')'返回所有具有'models'类的元素,并且是'this'后的元素的后代。老实说,我并不完全相信'.end()'是唯一的问题,而是你编写的代码不是你实际意思或想要的。 – 2012-02-20 15:27:40

+0

阅读[jQuery doc for'.end()'](http://api.jquery.com/end/)应该可以解决问题。 '.end()'不是必需的,而且正在搞乱。 – jfriend00 2012-02-20 15:56:39

回答

3

end()函数结束一个孩子的选择。
你不应该在这里使用它。

end()将用于这样的:

$(something) 
    .children() 
     .hide() 
    .end() //Go back to the original something 
    .animate() 
4

如果删除end(),它会工作。使用end()仅适用于在当前jQuery链中运行了一个函数,该函数修改了您正在处理的集合。

$('a.back-btn,a.front-btn').click(function(e){ 
    e.preventDefault(); 
    $(this).toggleClass('back-btn front-btn').next('.models').toggleClass('rotated'); 
}); 

这里有一个有效的(但完全没有意义的)使用的end()

$(this).next('.models').toggleClass('rotated').end().toggleClass('back-btn front-btn'); 

next()方法改变当前设置的jQuery元素我们正在努力,所以toggleClass方法适用于下一个.models元素。然后我们end()返回到$(this),我们在其上切换rotated类。

查看end() documentation作为另一种解释/示例。