我有一个生成id的复选框集合,其中一些有一个额外的属性。是否有可能使用JQuery来检查一个元素是否具有特定的属性? 例如,我能否验证以下元素是否具有属性“myattr”?属性的值可以变化。
<input type="checkbox" id="A" myattr="val_attr">A</input>
例如,我如何才能获得具有此属性的所有复选框的集合而不逐个检查?这可能吗?
我有一个生成id的复选框集合,其中一些有一个额外的属性。是否有可能使用JQuery来检查一个元素是否具有特定的属性? 例如,我能否验证以下元素是否具有属性“myattr”?属性的值可以变化。
<input type="checkbox" id="A" myattr="val_attr">A</input>
例如,我如何才能获得具有此属性的所有复选框的集合而不逐个检查?这可能吗?
当前回答
JQuery将以字符串的形式返回属性。因此,你可以检查该字符串的长度,以确定是否设置:
if ($("input#A").attr("myattr").length == 0)
return null;
else
return $("input#A").attr("myattr");
其他回答
要选择具有特定属性的元素,请参阅上面的答案。
为了确定给定的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)
}
我已经创建了npm包与预期的行为如上所述。
链接到[npm]和[github]
用法非常简单。例如:
<p id="test" class="test">something</p>
$("#test").hasAttr("class")
返回true。
骆驼皮也适用。
if ($('#A').attr('myattr')) {
// attribute exists
} else {
// attribute does not exist
}
编辑:
当myattr存在但为空字符串或“0”时,上述内容将归入else分支。如果这是一个问题,你应该显式地测试undefined:
if ($('#A').attr('myattr') !== undefined) {
// attribute exists
} else {
// attribute does not exist
}
你的意思是你可以选择他们吗?如果是,那么是的:
$(":checkbox[myattr]")
通过使用“typeof”和jQuery,我们得到了一些想法。是“和”。所以我想我应该张贴一个快速的性能比较他们。类型似乎是最好的选择。虽然其他方法也可以工作,但在为此工作调用jq库时,似乎存在明显的性能差异。