jQuery 实际上并没有 .hasAttr()
函数。你可能会认为它有,但可惜,它没有。
一个 StackOverflow 线程 提供了一些非常好的解决方案。
获取属性,检查值
var attr = $(this).attr('name');
// For some browsers, `attr` is undefined; for others, `attr` is false. Check for both.
if (typeof attr !== typeof undefined && attr !== false) {
// Element has this attribute
}
原生 JavaScript 有方法
如果你只有 jQuery 引用……
$(this)[0].hasAttribute("name");
jQObject[0].hasAttribute("name");
筛选选择
$(this).is('[name]');
$(this).filter("[name='choice']");
看起来第一个代码块的 if 条件中有一个额外的 typeof。它不应该这样吗:if(typeof attr !== ‘undefined’ && attr !== false) … ?
第一个 typeof 应用于 attr,第二个 typeof 应用于 undefined。但更重要的是,我想知道是否可以将其缩短为
var attr = $(this).attr(‘name’);
// 对于某些浏览器,
attr
是 undefined;对于其他浏览器,attr
是 false。检查两者。if (attr && attr !== false) {
// 元素具有此属性
}
或者
if (attr) {
// 元素具有此属性
}
我认为测试 if (attr) 是否会识别 attr 是否为 undefined,不是吗?
Tim
不确定我是否遗漏了什么,但这个怎么样?
if ($(this).is('[name]')) {
// 元素具有此属性
}
你好。如果你没有用引号括起“undefined”,它在 Chrome 中不起作用。
你应该使用或 ( || ) 参数而不是 &&,因为它在这里不起作用,以下是正确的形式。