不带动态数据属性:选择器

时间:2013-09-30 13:54:20

标签: jquery custom-data-attribute

我正在尝试从多个输入中删除禁用属性,但具有特定值的数据属性的输入除外。

如果我直接在html中设置数据属性,一切正常,但如果我在dom中动态设置,它就停止工作。

JS:

$("input[name='title']").data("notallow", 0);
$("input[name='cod']").data("notallow", 0);

console.log($("input[name='cod']").data()); // data is seted

$("body").on("click", "button", function(){
    $("input").not("[data-notallow='0']").attr("disabled", false);
});

jsfiddle

我缺少什么?

2 个答案:

答案 0 :(得分:2)

当您使用data时,您没有动态地为HTML设置属性,jQuery实际上使用您刚设置的新属性更新元素的“数据存储”。

因此,如果您想让notallow可用于“查询”,则不应使用.data()(甚至.prop())。您应该使用.attr(),这是实际创建属性的函数:

$("input[name='title']").attr("data-notallow", 0);
$("input[name='cod']").attr("data-notallow", 0);

你的小提琴,更新,here

注意:同样,您应该使用.prop()代替.attr()来启用/停用。

注2:数据存储.data()非常强大:您甚至可以存储对象。考虑到这一点,至少对我而言,更清楚地说明为什么.data()函数没有真正创建DOM data-属性(如何存储对象?)。

答案 1 :(得分:2)

@accciorior总结得很好。但是,您仍然可以对存储在jQuery data中的$.cache进行过滤(例如,在使用data()方法的示例中):

$('input').filter(function(i, el){
    return $(el).data('notallow') !== 0;
}).prop({ disabled: false });

http://jsfiddle.net/xvwMc/3/