在不使用.each的情况下检索.data

时间:2014-08-01 23:54:20

标签: jquery

如果我用某个类设置了一些任意数量的元素。我只能这样做:

$('.class_I_want', parentELEMref ).show();

你去了,我只是在某个元素下显示了该类的所有元素。

但是,如果我构建这些元素,并添加如下内容:

$(this_elem).data('myval','true');

我不能做同样的事情ala:

$( parentELEMref ).data('myval').show();

$(parentELEMref ).not("[data-myvar*='true']").show();

现在,如果我是$。就这样,那很好。但我希望能够在没有循环的情况下做到这一点,可能吗?

3 个答案:

答案 0 :(得分:2)

应该是:

$(parentELEMref).find(":not([data-myvar='true'])").show();

.not()方法对它应用的jQuery集合中的元素进行操作,它不会搜索它的子元素 - 你必须使用.find()

这不起作用:

$( parentELEMref ).data('myval').show();

因为.data('myval')返回数据的值,所以它不返回jQuery集合。

但是,您还需要更改数据的设置方式。您需要使用.attr()而不是.data()。当您第一次访问元素的数据时,jQuery将从data-XXX属性中提取它,但从那时起它将它缓存在内部jQuery内存中。分配数据不会修改DOM中的属性,这就是[data-myvar]选择器查找的内容。所以改变:

$(this_elem).data('myval','true');

为:

$(this_elem).attr('data-myval','true');

并确保始终如一地使用.attr()

答案 1 :(得分:0)

尝试将数据值添加为属性$( parentELEMref ).attr('data-myvar'); 然后使用选择器$([data-myvar="true"])

答案 2 :(得分:0)

这是因为$(this_elem).data('myval','true');正在将数据属性添加到选择中的每个元素而不是选择本身(无论如何都是一个没有真正永久性的瞬态对象)。

选择show() parentELEMref下的属性设置为false(或根本不设置)的元素执行此操作:

$(':not([data-myvar="true"])', parentELEMref).show();