我正在尝试将所有具有某个数据属性的元素设置为特定值,然后隐藏具有相同数据属性但具有不同值的所有其他元素。
我所拥有的代码似乎隐藏了所有元素,无论它们是否具有数据属性。
$('*').filter(function() {return $(this).data(dataAttr) == dataVal;}).show();
$('*').filter(function () { return $(this).data(dataAttr) !== dataVal; }).hide();
我需要这是动态的,因为我传递的是data-属性的名称和要匹配的值。
答案 0 :(得分:1)
我所拥有的代码似乎隐藏了所有元素,无论它们是否具有数据属性。
那是因为您正在选择'*'
的所有元素。如果元素甚至没有这样的属性,那么您将undefined
与值(undefined !== someValue
)进行比较可能总是true
。
首先选择具有该属性的所有元素,隐藏它们,然后显示具有特定值的元素:
$('[' + dataAttr + ']').hide()
.filter('[' + dataAttr + '="' + dataVal + '"]').show();
我决定在这里使用选择器,因为我相信使用.filter
和.data
会慢得多。