0

我试图显示具有特定数据属性设置为特定值的所有元素,然后隐藏具有相同数据属性但具有不同值的所有其他元素。

我的代码似乎隐藏了所有元素,无论它们是否具有 data- 属性。

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

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

4

1 回答 1

1

我的代码似乎隐藏了所有元素,无论它们是否具有 data- 属性。

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

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

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

我决定在这里使用选择器,因为我相信使用.filterand.data会慢得多。

于 2013-05-03T21:42:48.743 回答