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

Posted

技术标签:

【中文标题】具有以字符串开头的属性的元素的 jQuery 选择器【英文标题】:jQuery selector for elements with attribute starting with string 【发布时间】:2017-05-26 21:51:20 【问题描述】:

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

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

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

我该怎么做?

【问题讨论】:

【参考方案1】:
Array.from(document.querySelector('element').attributes).filter(x=>x.name.startsWith('attr-starts-with'))

【讨论】:

【参考方案2】:

你可以通过 ES6 做到这一点:

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

Online demo (jsFiddle)

【讨论】:

【参考方案3】:

这是我的解决方案 - 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');

【讨论】:

我最近不得不用这个。我在这里的某个地方找到了答案,但我刚刚找不到源。如果有人知道,请告诉我,我会向作者提供所有权! 这看起来很有希望。所以,要找到所有这些元素,我会使用$('*:attrStartsWith("data-abc-")')【参考方案4】:

我认为我们没有 jQuery 选择器和 regex。但是你可以使用this

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

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);
<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>

【讨论】:

是的,如果没有可用的选择器,那么手动遍历 DOM 并检查属性是唯一的选择。然而,这是极其低效的。您的代码仅检查***元素。我需要在 DOM 中的任何地方找到元素。就我而言,DOM 本身非常大(超过一百万个元素)。也就是说,很可能这就是 jQuery 无论如何都在做的原因。

以上是关于具有以字符串开头的属性的元素的 jQuery 选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jquery选择具有特定字符串的类开头和结尾的元素?

jquery笔记之属性选择器 查找以某种条件开头的页面元素

Jquery 选择器:属性值以开头和结尾

jQuery或CSS选择器选择以某个字符串开头的所有ID [重复]

JQuery选择器

jQuery:根据name属性的开头和结尾选择元素