jQuery将NOT放在选择器中的正确位置

时间:2012-09-27 12:23:49

标签: jquery jquery-selectors

我有以下jquery行

$('[genre*="'+$(this).attr('id')+'"]').fadeOut('fast');

它使用类型包含此元素的id值的类型淡出元素。

然而,我想要实现的是淡出剩余的元素,而不是匹配的元素。所以像这样:

$('[genre*="'+$(this).attr('id')+'"]:not').fadeOut('fast');

放置“不”的正确位置在哪里。

由于

2 个答案:

答案 0 :(得分:5)

你必须把它放在选择器前面

$(':not([genre*="'+$(this).attr('id')+'"])').fadeOut('fast');

要获取更多信息和样本,请查看not

的官方参考

修改

特别是那个选择器会导致不希望的效果。你可以用这样的东西修复它

$('[genre]').filter(':not([genre*="'+$(this).attr('id')+'"])').fadeOut('fast');​​​​​

答案 1 :(得分:2)

以下应该工作。我在这里写了代码,但想法是选择所有具有'genre'属性的元素,并检查id属性是否包含在该属性中。如果不是这样,则淡出该元素。

var id = $(this).attr('id');

$('[genre]').each(function(){
  if(!$(this).attr('genre').search(id))
    $(this).fadeOut('fast');
}); 

编辑:顺便说一句,您正在搜索具有genre属性且在此attirubte上包含某个关键字的值的元素。如果在此选择器上使用not运算符,则最终会得到除那些之外的所有元素,这些元素最终会出现在文档中的所有元素中。据我所知,jQuery中没有一个选择器就像'有'某些“属性和值不包含”这个值“'。