2010-05-29 117 views
1

我不知道这是什么问题?jQuery filter()遍历不似乎工作?

$('.post').live('mouseenter mouseleave', function() { 
     $(this).filter('anything here,a,div,.class,#id').toggleClass('hidden'); 
    }); 

这里工作正常。

$('.post').live('mouseenter mouseleave', function() { 
     $(this).toggleClass('hidden'); 
    }); 

有一个我想在鼠标悬停上显示的锚点。类似Facebook

+0

$(this)的上下文是什么?你确定它有什么你过滤吗? – Eli 2010-05-29 17:23:52

+0

此外,作为一个整体,您可能希望这样做两次,一次开启,一次关闭,并明确使用显示/隐藏。如果光标移动得足够快,它可能无法赶上关闭。 – Eli 2010-05-29 17:25:58

回答

3

$(this)指您的.post元素。

.filter()删除与选择器不匹配的任何东西。

因此,在你给出的例子,如果.post元素不是下列

'anything here,a,div,.class,#id' 

它被过滤掉一个。

.filter()不遍历。它需要一个jQuery集合并将其减少为与给定选择器匹配的元素。

http://api.jquery.com/filter/


编辑:

有很多方法在jQuery的遍历。

http://api.jquery.com/category/traversing/

要获取所有a元素是收到该事件的.post元素的后代,你可以这样做:

$(this).find('a'); 

哪个遍历方法使用将取决于您的情况。

+0

我懂了,它使用的孩子();感谢您的知识 – 2010-05-29 17:34:20

+0

'$(this)'是指接收事件的'.post'元素。要访问'$(this)'的后代,你可以执行'$(this).find('a')'。我会更新我的答案。 – user113716 2010-05-29 17:37:10