2013-05-03 78 views
0

我试图显示所有具有特定数据属性设置为特定值的元素,然后隐藏所有其他具有相同数据属性但具有不同的价值。jQuery数据选择器查找具有某个数据值的所有元素

代码我似乎隐藏所有元素,无论他们是否具有数据属性。

$('*').filter(function() {return $(this).data(dataAttr) == dataVal;}).show(); 
$('*').filter(function() { return $(this).data(dataAttr) !== dataVal; }).hide(); 

我需要这是动态的,因为我传递的是数据属性的名称和要匹配的值。

回答

1

代码我似乎隐藏所有元素,无论他们是否具有数据属性。

这是因为您选择的所有元素都是'*'。如果元素甚至没有这样的属性,那么您正在比较undefined与值(undefined !== someValue)可能总是true

选择具有该属性的所有元素首先,隐藏它们,然后显示与特定值的那些:

$('[' + dataAttr + ']').hide() 
.filter('[' + dataAttr + '="' + dataVal + '"]').show(); 

我决定,因为我相信使用.filter.data就会慢很多用在这里选择。

+0

就是这样!谢谢。 – 2013-05-03 22:11:01

+0

我刚刚意识到赢了;我为我工作,因为我需要这个来处理已经有display:block的项目。换句话说,没有显示的项目不应该受到影响。谢谢。 – 2013-05-03 22:23:20

+0

您可以添加':visible'选择器,只隐藏可见的元素。 – 2013-05-03 22:48:23