Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5数据属性中的通配符_Javascript_Jquery_Html_Sizzle - Fatal编程技术网

Javascript HTML5数据属性中的通配符

Javascript HTML5数据属性中的通配符,javascript,jquery,html,sizzle,Javascript,Jquery,Html,Sizzle,是否可以使用jQuery在属性名中使用通配符查找所有DOM元素 考虑以下HTML: <input id="val1" type="text" data-validate-required data-validate-minlength="3" data-validate-email /> 我试图实现的是查找属性名称以data validate- 据我所知,所描述的通配符与属性的“值”有关 这样做的原因是——我想找出到底

是否可以使用jQuery在属性名中使用通配符查找所有DOM元素

考虑以下HTML:

<input 
     id="val1" 
     type="text" 
     data-validate-required 
     data-validate-minlength="3" 
     data-validate-email />

我试图实现的是查找属性名称以
data validate-

据我所知,所描述的通配符与属性的“值”有关

这样做的原因是——我想找出到底应该验证哪些元素——然后找出哪些验证参数(如电子邮件)起作用


谢谢

您可以在心房上绕一圈:

$('.element').each(function() {
  $.each(this.attributes, function(i, att){
     if(att.name.indexOf('data-validate')==0){
         console.log(att.name);
     }
  });
});

您可以使用
filter
方法和对象:

允许在读取和写入模式下访问元素上设置的所有自定义数据属性(data-*)。它是DOMString的映射,每个自定义数据属性对应一个条目


您可以创建自定义伪类,例如,根据regexp:匹配属性名


因为JQuery严重依赖于,而且XPath不支持通配符属性选择——如果没有您希望避免的开销,这是不可能的

始终可以创建自己的选择器,以保持整洁:

//adds the :dataValidate selector
$.extend($.expr[':'],{
    dataValidate: function(obj){
        var i,dataAttrs=$(obj).data()
        for (i in dataAttrs) {
                if (i.substr(0,8)=='validate') return true;
        }
        return false;
    }
})
这将允许您在普通jQuery选择器中使用:dataValidate:

$(".element:dataValidate .etc")

使用JSFiddle:

对于我在许多模块中看到的情况,人们倾向于只添加前缀的另一个属性。HTH.@ambs所以不可能在属性名称中使用通配符,人们已经使用“前缀-”作为选择器来克服这一问题了?感谢您的建议-我已经可以使用
$('.sth').data()
获取所有“数据-”属性并迭代结果。但这对我来说似乎是一笔开销。所以基本上答案是:使用jQuery标准选择器和我的属性通配符想法是不可能的?我正要回答这个问题,但你抢先回答了。伪类非常有用。谢谢!我接受了这种方法。尽管我认为为了避免大型DOM的性能问题,我还是必须重构我的代码……谢谢你——同样好的回答如下!我选择了更“通用”的方法作为“已回答”。感谢xpath参考-现在我更清楚了。很好,但是对于那些浏览器支持是一个问题的人,请确保检查该链接上的兼容性表:例如,对于IE,它仅在版本11中(甚至还没有发布)
$(":attr('^data-')")
//adds the :dataValidate selector
$.extend($.expr[':'],{
    dataValidate: function(obj){
        var i,dataAttrs=$(obj).data()
        for (i in dataAttrs) {
                if (i.substr(0,8)=='validate') return true;
        }
        return false;
    }
})
$(".element:dataValidate .etc")