按属性选择元素

时间:2009-07-08 11:39:25

标签: jquery attributes

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

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

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

15 个答案:

答案 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)

简单地:

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

更多信息:official docs

答案 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包,如上所述。

指向[npm][github]

的链接

用法非常简单。例如:

<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");