具有以字符串开头的属性的元素的jQuery选择器

时间:2017-01-11 22:50:25

标签: jquery jquery-selectors

我需要选择所有具有以给定前缀开头的属性的元素 - 注意我说的是属性名称,不是值。例如:

<div data-abc-name="value">...</div>
<a href="..." data-abc-another="something">...</a>
<span data-nonabc="123">...</span>

在上面的HTML中,我需要获取所有具有以data-abc-开头的属性的元素 - 即diva

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以在ES6中这样做:

$('*').filter(function() {
  for (attr of this.attributes)
    if (attr.name.startsWith("data-abc"))
      return this;
});

Online demo (jsFiddle)

答案 1 :(得分:0)

我认为我们jQuery选择器与regex无关。但是,您可以使用this

在找到合适的选择器之前,这是一个小的解决方法,它选择匹配attribute的元素

&#13;
&#13;
var nodes = [];
$("body > *").each(function(){ //iterating over all nodes
  $(this.attributes).each(function(){
    console.log(this.nodeName);
    if(this.nodeName.indexOf("data-abc") > -1){
      nodes.push(this);
    }
  });
});

console.log(nodes.length);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-abc-name="value">...</div>
<a href="..." data-abc-another="something">...</a>
<span data-nonabc="123">...</span>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

以下是我的解决方案 - Fiddle。您必须创建自己的jquery选择器。

jQuery.extend(jQuery.expr[':'], {
    attrStartsWith: function (el, _, b) {
        for (var i = 0, atts = el.attributes, n = atts.length; i < n; i++) {
            if(atts[i].nodeName.toLowerCase().indexOf(b[3].toLowerCase()) === 0) {
                return true; 
            }
        }

        return false;
    }
});

//e.g:
$('a:attrStartsWith("data-abc")').html('hello');
$('div:attrStartsWith("data-abc")').html('hello');