关于jquery:按属性选择元素

Select elements by attribute

我有一组带有生成ID的复选框,其中一些具有额外的属性。是否可以使用jquery检查元素是否具有特定属性?例如,我可以验证以下元素是否具有属性"myattr"?属性的值可以变化。

1
<input type="checkbox" id="A" myattr="val_attr">A</input>

例如,在不逐个选中的情况下,如何获取具有此属性的所有复选框的集合?这有可能吗?


1
2
3
4
5
if ($('#A').attr('myattr')) {
    // attribute exists
} else {
    // attribute does not exist
}

编辑:

myattr存在但为空字符串或"0"时,上述内容将属于else分支。如果这是一个问题,您应该在undefined上明确测试:

1
2
3
4
5
if ($('#A').attr('myattr') !== undefined) {
    // attribute exists
} else {
    // attribute does not exist
}


你的意思是你能选择它们吗?如果是,那么是:

1
$(":checkbox[myattr]")


我知道问这个问题已经很久了,但我发现支票更清楚了:

1
2
3
4
5
if ($("#A").is('[myattr]')) {
    // attribute exists
} else {
    // attribute does not exist
}

(在这里找到)

有关IS的文档可在此处找到


这将起作用:

1
$('#A')[0].hasAttribute('myattr');


在javascript中,…

1
null == undefined

…返回true*。这是=====的区别。另外,可以定义名称undefined(它不是像null这样的关键字),所以最好检查其他方式。最可靠的方法可能是比较typeof运算符的返回值。

1
typeof o =="undefined"

不过,在这种情况下,与空值比较应该有效。

*假设undefined实际上是未定义的。


$("input[attr]").length可能是更好的选择。


使用"typeof"、"jquery"、"is"和"filter"时,有几个想法被抛到了脑后,所以我想我会发布一个快速的性能比较。这种类型似乎是最好的选择。虽然其他方法也可以工作,但在为此工作调用JQ库时,似乎存在明显的性能差异。


在本文中,使用.is和属性选择器[]可以轻松地添加函数(或原型):

1
2
3
function hasAttr($sel,attr) {
    return $sel.is('['+attr+']');
}


1
2
3
4
if (!$("#element").attr('my_attr')){
  //return false
  //attribute doesn't exists
}


简单地说:

1
$('input[name*="value"]')

更多信息:官方文件


1
$("input#A").attr("myattr") == null


我已经创建了具有上述预期行为的NPM包。

链接到[NPM]和[Github]

使用非常简单。例如:

1
2
3
<p id="test" class="test">something
</p>
$("#test").hasAttr("class")

返回true。

也适用于Camelcase。


除了选择具有$('[someAttribute]')$('input[someAttribute]')属性的所有元素外,还可以使用函数对对象执行布尔检查,例如在单击处理程序中:

埃多克斯1〔13〕


jquery将以字符串形式返回属性。因此,可以检查该字符串的长度,以确定是否设置了:

1
2
3
4
if ($("input#A").attr("myattr").length == 0)
 return null;
else
 return $("input#A").attr("myattr");