按属性选择元素

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

.

.

.

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

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

259492 次浏览
if ($('#A').attr('myattr')) {
// attribute exists
} else {
// attribute does not exist
}

编辑:

myattr存在但为空字符串或“0”时,上述对象将落入__abc0 -分支。如果这是一个问题,你应该显式地测试undefined:

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

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

$(":checkbox[myattr]")
$("input#A").attr("myattr") == null

在JavaScript中,…

null == undefined

...返回true *。它是=====之间的区别。另外,名字undefined可以被定义(它不是像null那样的关键字),所以你最好用其他方式检查。最可靠的方法可能是比较typeof操作符的返回值。

typeof o == "undefined"

然而,在这种情况下,与null进行比较是可行的。

*假设undefined实际上是未定义的。

JQuery将以字符串的形式返回属性。因此,你可以检查该字符串的长度,以确定是否设置:

if ($("input#A").attr("myattr").length == 0)
return null;
else
return $("input#A").attr("myattr");

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

简单:

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

更多信息:官方文档

我知道这个问题已经问了很长时间了,但我发现答案是这样的:

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

(在这个网站在这里上找到)

有关的文档可以在在这里中找到

通过使用“typeof”和jQuery,我们得到了一些想法。是“和”。所以我想我应该张贴一个快速的性能比较他们。类型似乎是最好的选择。虽然其他方法也可以工作,但在为此工作调用jq库时,似乎存在明显的性能差异。

除了选择具有$('[someAttribute]')$('input[someAttribute]')属性的所有元素外,还可以使用函数对对象进行布尔检查,例如在单击处理程序中:

if(! this.hasAttribute('myattr') ) { ...

if (!$("#element").attr('my_attr')){
//return false
//attribute doesn't exists
}

这是可行的:

$('#A')[0].hasAttribute('myattr');

我已经创建了npm包与预期的行为如上所述。

链接到(npm)(github)

用法非常简单。例如:

<p id="test" class="test">something</p>
$("#test").hasAttr("class")

返回true。

骆驼皮也适用。

这篇文章一样,使用.is和属性选择器[],你可以很容易地添加一个函数(或原型):

function hasAttr($sel,attr) {
return $sel.is('['+attr+']');
}

要选择具有特定属性的元素,请参阅上面的答案。

为了确定给定的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)
}

要获得基于多个属性的所有checkbox元素的集合,例如在本例中是idmyattr:

var checkboxCollection = $(":checkbox[id][myattr]");

如果你需要为集合中的每个复选框分配事件处理程序:

$(":checkbox[id][myattr]").change(function() {
if(this.checked) {
var valueOfAttribute = $(this).attr('myattr');
// code here
}
else{
// code here
}
});

如果属性出现在给定的HTML元素中,我们可以很容易地访问value属性。

var offORonlinePath="../img/";   //We can easy to change the path anytime
var extension=".webp"; //we can later change any value like png,jpg,...


$("img[data-src]").each(function(){
var imgName=$(this).data("src");


$(this).attr("src",offORonlinePath+imgName+extension);


})