[英]Remove DOM element from array
我必须在我的数组中推送一些 Dom 元素,有时还要从数组中删除它们。
这是我在做什么:
var myDOMS = new Array();
myDOMS.push($("#myDiv"));
var element_to_remove = $("#myDiv");
var index = $.inArray(element_to_remove, myDOMS);
if (index > -1) {
myDOMS.splice(index, 1);
}
关于删除的部分不起作用。 你知道我做错了什么吗? 有可能吗?
每次评估$("#myDiv")
您都会得到一个新对象。 所以这永远不是真的:
$("#myDiv") === $("#myDiv")
如果你想这样工作,你真的应该使用 DOM 元素引用。 像这样的东西:
var myDOMS = new Array();
myDOMS.push($("#myDiv").get(0));
var element_to_remove = $("#myDiv").get(0);
var index = $.inArray(element_to_remove, myDOMS);
console.log(index);
if (index > -1) {
myDOMS.splice(index, 1);
}
首先,纠正一下。
$(XYZ)
您提供一个新对象,其中包含由选择器( XYZ
部分)匹配的所有 DOM 元素的集合。有了这个,这里是没有jQuery并发症的解决方案:
var elements = []; //prefer literal constructor over "new Array();" for brevity elements.push(document.getElementById("myDiv")); var element_to_remove = document.getElementById("myDiv"); var index = elements.indexOf(element_to_remove); console.log("element index: "+index); if(index !== -1){ //element was present in the array elements.splice(index,1); }
<div id="myDiv"></div>
因此,您遇到的问题是,当您使用 jQuery 选择器时,您会创建一个唯一的 jQuery 对象(或对象集合,如果有多个),其中包含有关匹配元素的一堆信息,包括引用到 DOM 元素本身(第一部分信息,可通过$("#someElement")[0]
引用
由于这些对象是唯一的,虽然它们可能包含有关返回元素的相同信息,但对象本身并不相等。 所以,对于:
var bodyRef1 = $("body");
var bodyRef2 = $("body");
var bodyRef3 = $("body");
你会发现对象中包含的值都是相等的:
bodyRef1[0] === bodyRef2[0] === bodyRef3[0]
bodyRef1.context === bodyRef2.context === bodyRef3.context
etc. . . .
对象本身不是
bodyRef1 !== bodyRef2 !== bodyRef3
在您的情况下,除非有特定原因需要以 jQuery 格式选择元素,否则您实际上最好只执行本机 JavaScript 选择,并消除额外的复杂层:
var myDOMS = new Array();
myDOMS.push(document.getElementById("myDiv"));
var element_to_remove = document.getElementById("myDiv");
var index = $.inArray(element_to_remove, myDOMS);
if (index > -1) {
myDOMS.splice(index, 1);
}
这是有效的,因为原生 JS 选择只返回对 DOM 元素的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.