我将元素对象添加到像这样的数组
window.elements = [];
var newElement = $(".element");
elements.push( newElement );
单击某个元素时,会使用上面的代码将其添加到数组中;如果我单击两次相同的元素,即使元素对象已经在数组中,也会再次添加相同的对象。
如何检查元素对象是否已存在于数组中;不要添加它。 我试过以下但是得到-1,即使它在数组中。
var newElement = $(".element");
if( jQuery.inArray( newElement, elements ) ) {
elements.push( newElement );
}
答案 0 :(得分:0)
这是因为jQuery.inArray
使用===
并且两个人对象永远不会与===
相同,因为他们指的是引用不同的引用。当你执行$(selector)时,你总是得到一个新的Object。因此,它们是指向相同DOM元素的两个不同引用。
所以你可以做的是(一种可能的解决方案)向对象添加一个属性。
单击对象设置数据属性
var newElement = $(".element");
if( ! $(".element").attr("data-arr")) {
elements.push( newElement );
$(".element").attr("data-arr", true);
}
答案 1 :(得分:0)
您可以使用Array.Prototype.indexOf()方法,如果在数组中找不到指定的项目,则返回-1
:
if (elements.indexOf(newElement) === -1 {
elements.push(newElement);
}
答案 2 :(得分:0)
var newElement = $(".element");
if( !jQuery.inArray( newElement, elements ) ) {
elements.push( newElement );
}
答案 3 :(得分:0)
inArray()
将返回-1
,如果它是数组中的第一个索引则返回零。因此,您必须与-1
进行比较,因为0
是假的
比较并将实际的dom元素推送到数组以避免使用不同的对象引用。
window.elements = [];
$('.someClass').click(function(){
if( jQuery.inArray( this, elements ) === -1 ) {
elements.push( this);
}
})
简单地向元素添加一个类可能会更简单...然后过滤掉该类所有单击的类,让jQuery提供所需的数组。
答案 4 :(得分:0)
$(".element")
不会返回单个元素。它返回包含class="element"
的所有项的数组。您正在尝试将单击的项目添加到阵列。假设可点击项具有类元素,您可以这样做:
$('.element').click(function(){
elements.push($(this));
return false;
});