我有一组带有生成ID的复选框,其中一些有一个额外的属性。是否可以使用JQuery来检查元素是否具有特定属性? 例如,我可以验证以下元素是否具有属性“myattr”?属性的值可以变化。
<input type="checkbox" id="A" myattr="val_attr">A</input>
例如,如何逐个获取具有此属性的所有复选框的集合?这可能吗?
答案 0 :(得分:364)
if ($('#A').attr('myattr')) {
// attribute exists
} else {
// attribute does not exist
}
修改强>
当else
存在时,上述内容将落入myattr
- 分支,但是为空字符串或“0”。如果这是一个问题,您应该在undefined
上明确测试:
if ($('#A').attr('myattr') !== undefined) {
// attribute exists
} else {
// attribute does not exist
}
答案 1 :(得分:188)
你的意思是你能选择它们吗?如果是,那么是的:
$(":checkbox[myattr]")
答案 2 :(得分:166)
我知道问题被问到已经很长时间了,但我发现支票更加清晰:
if ($("#A").is('[myattr]')) {
// attribute exists
} else {
// attribute does not exist
}
(如本网站here所示)
可以找到有关 的文档here
答案 3 :(得分:8)
在JavaScript中,......
null == undefined
...返回true
*。这是==
和===
之间的差异。此外,可以定义名称undefined
(它不是null
之类的关键字),因此您最好以其他方式检查。最可靠的方法可能是比较typeof
运算符的返回值。
typeof o == "undefined"
然而,在这种情况下,与null相比应该有效。
*假设undefined
实际上未定义。
答案 4 :(得分:8)
这将有效:
$('#A')[0].hasAttribute('myattr');
答案 5 :(得分:5)
$("input[attr]").length
可能是更好的选择。
答案 6 :(得分:4)
使用“typeof”,jQuery“.is”和“.filter”时,有几个想法被抛出,所以我想我会发布它们的快速性能比较。 typeof似乎是最好的选择。虽然其他工作正常,但在为此工作调用jq库时似乎存在明显的性能差异。
答案 7 :(得分:1)
$("input#A").attr("myattr") == null
答案 8 :(得分:1)
答案 9 :(得分:1)
if (!$("#element").attr('my_attr')){
//return false
//attribute doesn't exists
}
答案 10 :(得分:1)
与this post一样,使用.is
和属性选择器[]
,您可以轻松添加函数(或原型):
function hasAttr($sel,attr) {
return $sel.is('['+attr+']');
}
答案 11 :(得分:0)
除了选择具有属性$('[someAttribute]')
或$('input[someAttribute]')
的所有元素之外,您还可以使用函数对对象执行布尔检查,例如在单击处理程序中:
if(! this.hasAttribute('myattr') ) { ...
答案 12 :(得分:0)
我已经创建了具有预期行为的npm包,如上所述。
的链接用法非常简单。例如:
<p id="test" class="test">something</p>
$("#test").hasAttr("class")
返回true。
也适用于camelcase。
答案 13 :(得分:0)
要选择具有特定属性的元素,请参见上面的答案。
要确定给定的jQuery元素是否具有特定属性,我正在使用一个小插件,如果ajQuery集合中的第一个元素具有此属性,则返回true
:
/** hasAttr
** helper plugin returning boolean if the first element of the collection has a certain attribute
**/
$.fn.hasAttr = function(attr) {
return 0 < this.length
&& 'undefined' !== typeof attr
&& undefined !== attr
&& this[0].hasAttribute(attr)
}
答案 14 :(得分:-5)
JQuery将该属性作为字符串返回。因此,您可以检查该字符串的长度以确定是否已设置:
if ($("input#A").attr("myattr").length == 0)
return null;
else
return $("input#A").attr("myattr");