按属性select元素

我有一个checkbox与生成的ID集合,其中一些有一个额外的属性。 是否有可能使用JQuery检查一个元素是否有一个特定的属性? 例如,我可以validation下列元素是否具有属性“myattr”? 属性的值可能会有所不同。

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

例如,我怎样才能得到所有具有这个属性的checkbox的集合,而不是逐个检查? 这可能吗?

你的意思是你可以select吗? 如果是这样,那么是的:

 $(":checkbox[myattr]") 
 if ($('#A').attr('myattr')) { // attribute exists } else { // attribute does not exist } 

编辑:

myattr存在时,上述将落入else myattr ,但是是一个空string或“0”。 如果这是一个问题,你应该明确地testingundefined

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

我知道这个问题已经过了很长时间了,但是我发现这个检查更清晰:

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

(在这里find这个网站)

有关的文档可以在这里find

在JavaScript中,…

 null == undefined 

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

 typeof o == "undefined" 

尽pipe如此,与null比较应该在这种情况下工作。

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

这将工作:

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

$("input[attr]").length可能是一个更好的select。

一些想法被扔在使用“typeof”,jQuery“.is”和“.filter”,所以我想我会张贴一个快速的性能比较他们。 typeof似乎是这个的最佳select。 虽然其他人会工作,但在调用jq库进行这项工作时,似乎有明显的性能差异。

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

只是:

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

更多信息: 官方文档

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

if(! this.hasAttribute('myattr') ) { ...

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

我已经按照上面所描述的那样创build了具有预期行为的npm包。

链接到[npm]和[github]

用法很简单。 例如:

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

返回true。

和camelcase一起工作。

JQuery将以string的forms返回属性。 因此,您可以检查该string的长度以确定是否已设置:

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