jQuery hasAttr checking to see if there is an attribute on an element
Possible Duplicate:
Check existence of an attribute with JQuery
号
如何检查jquery中的元素是否有属性?与hasClass 相似,但与attr 相似?
例如,
1 2 3
if ($(this).hasAttr("name")) {
// ...
}
这里有一个jquery插件,它似乎可以完全满足您的需求->plugins.jquery.com/project/hasattr
bmarti44看起来链接有些腐烂。
stackoverflow.com/questions/1318076/…这里是更好的答案。
quickie:if( $(this).is('[ATTRIBUTE_NAME]') ) { /* ... */ } btw:这不再是该问题的副本,只是一个关于不同问题的类似问题,链接副本现在称为"按属性选择元素"。
既然jquery没有一个方便的函数,为什么不使用$('#myid')[0].hasAttribute("onclick") ?是香草的
同意,@jave.web,由于另一个问题被更改,这不再是一个副本。(这是检查属性,另一个是按属性选择。)
可以工作的替代逻辑:if($(this).filter('[name]').length) { ... } 。
@casperone,请将此线程取消标记为副本。
另外,我也很喜欢这个解决方案:if(typeof $(this).attr('name') === 'string') { /* do something */ }
1 2 3 4 5 6 7
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) {
// ...
}
啊哈,谢谢。这对我来说是正确的答案,因为返回未定义不是我想要的。再次感谢。
最好这样做:if(typeof($(this.attr('name))!='未定义')/…}因为undefined实际上可以使用简单的:undefined=1重新定义
@谢恩·汤姆林森,是的,我现在知道了。这篇文章是一年前写的,当时我不知道JavaScript的大部分怪癖。尽管如此,我还是更新了我的答案;谢谢。
这个测试在Chrome(很可能是所有WebKit)中都失败了,因为那些浏览器中不存在的属性返回"false"而不是未定义的。karim79非常接近,但这样做效果更好:$.fn.hasattr=函数(attr)var attribval=this.attr(attr);return(attribval!==未定义)&;&;(属性!==假);
@虽然可能很简单,但在过去的一年里似乎发生了很多变化。=]我会更新我的答案。
@是的,但如果attr 是"" 的话,也会返回false 。它应该是true ,因为空属性是有效的属性。而且,不需要双份的,因为不管怎样,if 都会把双份扔到布尔。
对于记录,在IE<9中,如果试图测试复选框和单选按钮元素上是否存在value 属性,则此操作将不起作用。它总是返回默认值为on 的value属性的值。其他浏览器允许您像预期的那样测试属性。我无法找到任何方法来确定该场景是否缺少值属性(除了假设"on"丢失)。
if(attr)//应该足够了
api.jquery.com/has-attribute-selector怎么样
@斯特拉格:用这样的东西怎么样:document.getElementById('..').hasOwnProperty('href') ?我在Chrome中查看了这个,它似乎有效。
@用户01,如我所写,.href 可以设置为false 。
@香奈托姆林森-但是你应该做一个强有力的比较!if(typeof($(this).attr('name'))!=='未定义')-因为未定义实际上可以使用简单的:undefined='未定义';)重新定义)
这不适用于 ,如果测试看它们是否有价值。
根据api.jquery.com/attr .attr 返回截至jquery v1.6版尚未设置的属性(跨浏览器)的undefined 。
@请不要这样做!!作为快捷方式。不一样!如果属性值为"0"或"0",则将得到false。
埃多克斯1〔14〕
@jamitreworgy@spyk3hh .attr() 不适用于"动态"属性,如value —您需要使用.prop() 。
@DMNC请删除您的回复,因为您会导致许多头痛,因为!!0的计算结果也为false,但该属性可以设置为0
这是一个很好的答案,真的帮了我很大的忙。但是以东十一〔十八〕会不会做同样的事?
@香奈托姆林森是真的-但如果是这样的话,你可能有更大的问题…
谢谢你给我这个有用的提示。谨致问候。
那就用$(this).is("[name]") 怎么样?
[attr] 语法是属性为attr 的元素的css选择器,.is() 检查它调用的元素是否与给定的css选择器匹配。
如果您想首先选择具有name属性的所有项目,只需执行$('[name]') 。
对于那些想使用jquery检查svg dom下的类的人来说,这可能是一种替代方法。
注:使用此选择器,它将不起作用:[camelizedAttr] 。
这个又短又简单。有什么理由让许多人喜欢斯特朗的答案吗?
这对我很有效,而且比其他答案更清楚(这也是有效的)
@据我所知,user669677 jquery 1.6.4及更高版本似乎处理混合大小写属性名。
@Deepmax我也会使用这个,但是性能方面的Strager的答案会更快。
我最终实现了类似的东西,但对于一个稍微不同的用例:var $hasattr = $(this).filter('[name]') 。然后可以修改组($hasattr.addClass('fish') ),检查有多少属性($hasattr.length 等)。
好极了!很容易变成一个函数:function hasAttr($sel,attr) { return $sel.is('['+attr+']'); } 。
如果您要经常检查属性的存在性,我建议创建一个hasAttr 函数,以便按照您在问题中的假设使用:
1 2 3 4 5 6 7 8 9 10 11 12 13
$.fn.hasAttr = function(name) {
return this.attr(name) !== undefined;
};
$(document).ready(function() {
if($('.edit').hasAttr('id')) {
alert('true');
} else {
alert('false');
}
});
Test field
。
@崔克-不是打字错误,!我的意思是。
太酷了,我以前没见过这件事。==不完全等于(值和类型)]
"undefined"不是javascript中的关键字(请参见constc.blogspot.com/2008/07/&hellip;)。将"var undefined;"作为hasattr()函数的第一行是最简单的修复方法。
@karim79:@mhenry1384是对的,我认为你应该像strager那样返回适当的值:stackoverflow.com/a/1318091/517705。所以,也许return (typeof this.attr(name) !== 'undefined' && this.attr(name) !== false); 会更好。
这篇原始文章使用未定义是正确的。不需要使用typeof。
我发现你需要检查空返回(这个。属性(名称)!==空);
你离得太近了,太疯狂了。
1
if($(this).attr("name"))
没有hasattr,但是如果不存在属性,按名称点击属性将返回undefined。
这就是下面工作的原因。如果从标题中删除name属性,则会触发第二个警报。
更新:根据注释,以下仅在属性存在且设置为空的情况下有效
1 2 3 4 5 6 7 8 9 10
<script type="text/javascript">
$(document).ready(function()
{
if ($("#heading").attr("name"))
alert('Look, this is showing because it\'s not undefined');
else
alert('This would be called if it were undefined or is there but empty');
});
<h1 id="heading" name="bob">Welcome!
号
不过,这两种情况下的行为是相同的。在我展示的实例中,您可以将对false的评估与未定义的交换。.attr("name")不会返回false,但它正在评估为false。所以你可以用上面的方法来使用它。
如果名称attr存在但字符串为空,则该属性将存在,但测试将失败。
问题是问属性是否存在,而不是如果属性为空该怎么办。
兰巴克注意到至少有一种情况,即使属性存在,测试也会说它不存在。如果属性的值为空字符串或0,则即使标记中存在该属性,仍将执行else子句。
事后回顾一下,你们都是对的。我看不出兰巴克在做什么。
'0' == true; // false 。
这是唯一一个在我尝试过的每一个浏览器上都有效的解决方案。干得好!简单的
派对迟到了,但是…为什么不只是this.hasAttribute("name") ?
参考这个
如果不需要jquery对象,则回答正确
或者,如果你不在乎,它在很多老的浏览器和IE中都不起作用。
@Baiano IE6&7是唯一不支持它的,现在很好地提到,因为IE8几乎是所有的支持。
如果过时的浏览器不是问题,而且从2014年开始,这就是解决方案。
@Harry,注意jquery变成了jquery_obj.get().hasAttribute("name") ,这当然意味着您只测试第一个元素。使用each() 检查当前jquery_obj 中的所有元素。参见api.jquery.com/get
@Alexiswilke你有点错,obj.get() 会返回整个集合=数组,即使只有一个元素——它不会起作用——如果你想得到集合的第一个元素,你想要使用的是obj.get(0) 。
我只得到"hasattribute is not a function"错误。不知道为什么,在jquery文档中,它是一个函数。去想一想!
哦,我是多么喜欢JQ问题中的这些JS宝石:)
最好的方法是使用filter() :
1
$("nav>ul>li>a").filter("[data-page-id]");
拥有.hasattr()仍然是件好事,但由于它不存在,所以存在这种方式。
你可以通过像$("nav>ul>li>a").filter("[data-page-id=123]"); 这样的值来过滤它。
如何查找带有out-src属性的 标记。动态加载一些图像。像
1 2 3 4 5 6 7 8
Object.prototype.hasAttr = function(attr) {
if(this.attr) {
var _attr = this.attr(attr);
} else {
var _attr = this.getAttribute(attr);
}
return (typeof _attr !=="undefined" && _attr !== false && _attr !== null);
};
。
我在写自己的函数来做同样的事情时遇到了一个难题…我想我会分享,以防有人在这里绊倒。我添加了空值,因为如果该属性不存在,getattribute()将返回空值。
这个方法允许您检查jquery对象和常规的javascript对象。
我为jquery编写了一个hasattr()插件,它可以非常简单地完成所有这些工作,正如op所请求的那样。此处提供更多信息
编辑:我的插件在2010年的大插件jquery.com数据库删除灾难中被删除。您可以在这里查找一些关于自己添加它以及为什么没有添加它的信息。
有趣的是,这些链接在IE 8中不起作用,但在Chrome中起作用…
您还可以将其与表单字段上的disabled="disabled"等属性一起使用,例如:
1 2 3 4 5 6 7 8
$("#change_password").click(function() {
var target = $(this).attr("rel");
if($("#" + target).attr("disabled")) {
$("#" + target).attr("disabled", false);
} else {
$("#" + target).attr("disabled", true);
}
});
。
"rel"属性存储目标输入字段的ID。