jQuery - 如何按属性名称选择值以

use*_*581 13 jquery startswith selector attr

我想通过给出属性名称来选择属性值(仅以...开头)例如,如果我们有html标签

<div class = "slide"  data-confirmID = "46" confirmID = "54"/>
Run Code Online (Sandbox Code Playgroud)

我想从属性开始选择值 data-

在此先感谢您的帮助.

A. *_*lff 24

如果你想要所有data-*属性,你可以遍历jq数据对象:

$('.slide').each(function(){
    for(data in $(this).data())
        console.log(data); // returns confirmID so element as an attribute `data-confirmID`
});
Run Code Online (Sandbox Code Playgroud)

但是这个数据对象可以包含其他非属性的键,例如由某些插件设置.

编辑

要将各种属性设置为"以...开头",您可以自定义自己的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:
$('.slide:attrStartsWith("data-")').css('color', 'red');
$('.slide:attrStartsWith("conf")').css('color', 'blue');
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="slide" data-confirmID="46" data-testID="666">1</div>
<div class="slide" confirmID="54" >2</div>
Run Code Online (Sandbox Code Playgroud)

如果在另一侧,您想要检查具有特定字符串的属性结尾,您可以使用:

jQuery.extend(jQuery.expr[':'], {
    attrEndsWith: function (el, _, b) {
        for (var i = 0, atts = el.attributes, n = atts.length; i < n; i++) {
          var att = atts[i].nodeName.toLowerCase(),
              str = b[3].toLowerCase();
            if(att.length >= str.length && att.substr(att.length - str.length) === str) {
                return true; 
            }
        }
        
        return false;
    }
});

$('.slide:attrEndsWith("testID")').css('color', 'red');
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="slide" data-confirmID="46" data-testID="666">1</div>
<div class="slide" confirmID="54" >2</div>
Run Code Online (Sandbox Code Playgroud)