0

我在一个项目中拥有所有元素,这些元素正在与数据属性一起传输,因此 javascript 可以知道该做什么。

但是我有一个问题,应用程序的一部分必须获取所有创建的变量来比较时间,并且我将它们保存为(data-product-createddata-category-createddata-link-created等... )。如果我不得不手动将它们放在 jQuery 选择器上,那将是一个巨大的头痛......

jQuery是否有一些方法来搜索自定义数据属性的存在?

像:element[data-(.*)-created]

4

2 回答 2

2

您可以创建一个低级 Javascript 方法来循环遍历元素并提取它们创建的值:

var getCreateds = function($els) {
    var returnSet = [];
    $els.each(function(i, el){
        var elDict = {'el': el};
        $.each(el.attributes, function(i, attr){
            var m = attr.name.match(/data\-(.*?)\-created/);
            if (m) elDict[m[1]] = attr.value;
        });
        returnSet.push(elDict);
    });
    return returnSet;
};

看演示

于 2013-03-06T18:39:50.307 回答
0

根据mVChr答案(谢谢),我用一个简单、更好和干净的代码重写了代码:

jQuery('div').filter(function(){
  for( var i in this.attributes ){
    if(typeof this.attributes[i] !== 'object') continue;
    if(this.attributes[i].name.match(/data\-(.*?)\-created/)) return true;
  }
  return false;
})

变化:

+ Verifying attribute type... some attributes are browser internal functions or callbacks.
~ Using filter handler from jQuery, its better and cleaner way.
~ Using for instead of $.each, faster indeed.
于 2013-03-06T19:39:25.533 回答