如果我用某个类设置了一些任意数量的元素。我只能这样做:
$('.class_I_want', parentELEMref ).show();
你去了,我只是在某个元素下显示了该类的所有元素。
但是,如果我构建这些元素,并添加如下内容:
$(this_elem).data('myval','true');
我不能做同样的事情ala:
$( parentELEMref ).data('myval').show();
或
$(parentELEMref ).not("[data-myvar*='true']").show();
现在,如果我是$。就这样,那很好。但我希望能够在没有循环的情况下做到这一点,可能吗?
答案 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();