按属性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");