按属性选择元素

Cip*_*osu 251 jquery attributes

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

<input type="checkbox" id="A" myattr="val_attr">A</input>
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*rig 366

if ($('#A').attr('myattr')) {
    // attribute exists
} else {
    // attribute does not exist
}
Run Code Online (Sandbox Code Playgroud)

编辑:

以上将elsemyattr存在时落入-branch,但是为空字符串或"0".如果这是一个问题,你应该明确测试undefined:

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

  • 你是对的...但是重新定义`undefined`被认为是一个边缘情况,上面的比较将在99%的情况下起作用. (16认同)
  • if(typeof $('#A').attr('myattr')!=='undefined') (8认同)
  • 如果属性具有空字符串,则不起作用.一个例子是myattr ='' (6认同)
  • 不是一个好的答案."undefined"不是Javascript中的关键字.请参阅http://constc.blogspot.com/2008/07/undeclared-undefined-null-in-javascript.html (3认同)
  • @mhenry - 那你就错了:)如果你正在为我或我一起构建项目,我会要求你修复你的错误.如果它是一个开源软件包,那么我(以及许多用户)将基于其编码不良的理由停止使用它.如果你没有改变它,那么其他人最终会在没有错误的情况下分叉一个版本而人们会使用它而你会丢失你自己的项目,就像有人创建一个包含一个好主意的包之前发生过很多次执行不力.无论哪种方式,它会教你一个关于编码实践的课程:) (3认同)

cle*_*tus 189

你的意思是你可以选择它们吗?如果是,那么是:

$(":checkbox[myattr]")
Run Code Online (Sandbox Code Playgroud)

  • @rinogo:实际上你需要的只是if($(":checkbox [myattr]").length).长度之后的()不是必需的,在不需要严格相等(值和类型)的相等测试中,> 0,0都不计算为false. (14认同)
  • 冒号选择由类型attr确定的伪类.要将相同的东西应用于td,只需省略冒号即可. (6认同)
  • 请注意,如果您正在测试存在(例如,可能在if语句中),则可能更正确/可靠:if($(":checkbox [myattr]").length()> 0)... (4认同)

Jon*_*ron 166

我知道问题问题已经很长时间了,但我发现支票更加清晰:

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

(如在此网站上发现这里)

文档有关,可以发现这里

  • 这是最合理的答案 (7认同)
  • 我同意,这是最好的答案(使用jQuery) - 非常简洁明了.我确实发现自己想知道为什么jQuery不只是有一个hasAttribute()函数,而答案是,本机javascript已经有了一个.任何HTML Dom元素都有一个方法hasAttribute('attributeName').所以你可以这样做:$('#A')[0] .hasAttribute('myattr')@chmike - 我认为你不能使用jQuery函数添加一个空属性,但你可以用HTML Dom元素来做对象的方式如下:$("#A")[0] .setAttributeNode(document.createAttribute("myNewAttribute")); (5认同)

pow*_*kee 9

这将有效:

$('#A')[0].hasAttribute('myattr');
Run Code Online (Sandbox Code Playgroud)

  • 请参阅链接:http://stackoverflow.com/questions/1318076/jquery-hasattr-checking-to-see-if-there-is-an-attribute-on-an-element (2认同)

bam*_*ams 8

在JavaScript中,......

null == undefined
Run Code Online (Sandbox Code Playgroud)

...返回true*.这之间的区别=====.此外,undefined可以定义名称(它不是像nullis这样的关键字),所以最好还是以其他方式检查.最可靠的方法可能是比较typeof运营商的回报值.

typeof o == "undefined"
Run Code Online (Sandbox Code Playgroud)

然而,在这种情况下,与null相比应该起作用.

*假设undefined事实上是未定义的.


小智 5

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