Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript内存问题_Javascript_Html_Jquery - Fatal编程技术网

javascript内存问题

javascript内存问题,javascript,html,jquery,Javascript,Html,Jquery,比如说,在我的webapp启动之前,我想首先创建所有dom元素,并将它们存储在一些预加载的数组中。比如: for (i = 1...100) { preLoader.push($('<div id="' + i + '" />')); } (i=1…100){preload.push($('');}的 然后,根据操作的不同,我将从数组中获取正确的元素并将其附加到DOM中。 现在我的问题是:如果我以后要做: $(div#i).remove() 它是否也会影响我的预加载程序数组,或

比如说,在我的webapp启动之前,我想首先创建所有dom元素,并将它们存储在一些预加载的数组中。比如:

for (i = 1...100) { preLoader.push($('<div id="' + i + '" />')); }
(i=1…100){preload.push($('');}的

然后,根据操作的不同,我将从数组中获取正确的元素并将其附加到DOM中。
现在我的问题是:如果我以后要做:

$(div#i).remove()


它是否也会影响我的预加载程序数组,或者它与DOM中的引用不同?

DOM中的对象是相同的。如果你想再次使用同一个标签,你应该调用

$(div#i).detach();
从jquery文档:

.detach()方法与.remove()方法相同,不同之处在于.detach()保留与已删除元素关联的所有jQuery数据。当删除的元素稍后要重新插入DOM时,此方法非常有用

如果使用.remove(),则将丢失与要删除的元素关联的事件和数据。但是,即使使用remove(),也可以通过再次调用.appendTo()来重用相同的元素

小提琴手的例子:
(很抱歉发出警报,这是最简单的方法)。

DOM中的对象是相同的。如果你想再次使用同一个标签,你应该调用

$(div#i).detach();
从jquery文档:

.detach()方法与.remove()方法相同,不同之处在于.detach()保留与已删除元素关联的所有jQuery数据。当删除的元素稍后要重新插入DOM时,此方法非常有用

如果使用.remove(),则将丢失与要删除的元素关联的事件和数据。但是,即使使用remove(),也可以通过再次调用.appendTo()来重用相同的元素

小提琴手的例子: (对于警报,很抱歉,这是最简单的方法)

它还会影响我的预加载程序阵列吗

不,不会的。对象将从内存中删除,并且只有在没有方法访问它时,也就是说没有对它的引用。在
$('div#'+i).remove()之后,您无法从DOM访问它,但仍然可以通过
预加载程序[i-1]
访问它。因此,您需要从
预加载程序
数组显式地
删除对象:

preLoader.splice(i-1,1);
它还会影响我的预加载程序阵列吗

不,不会的。对象将从内存中删除,并且只有在没有方法访问它时,也就是说没有对它的引用。在
$('div#'+i).remove()之后,您无法从DOM访问它,但仍然可以通过
预加载程序[i-1]
访问它。因此,您需要从
预加载程序
数组显式地
删除对象:

preLoader.splice(i-1,1);

我认为所有与DOM相关的函数(比如append)实际上都会接受这个参数,并在内存中为它创建一个新的对象,只是为了DOM,然后附加它?因此,例如,如果在附加到DOM之后,我执行:$('div#'+I).css(宽度:0),它将只应用于DOM中的元素,而不是存储在数组中的元素,因为它们是不同的实体。或者它们实际上指向内存中的同一地址,因此修改一个地址也会修改另一个地址吗?@paulsmith看,jQuery只是一种易于使用
DOM
的机制。实际上,只有
DOM
DOMElement
s。因此,当您从
DOM
中删除
DOMElement
时(使用jQuery或smthn-else无法实现),它们不会从jQuery包装器中删除,jQuery包装器存在于
预加载程序
数组中,其中包含对相应
DOMElement
的引用@paulsmith,回答您的问题:“$('div#'+i).css(宽度:0),它将仅将其应用于DOM中的元素”。不,它也将应用于数组中的元素。附加到DOM的元素与数组中的元素相同。检查我下面的答案。我认为所有与DOM相关的函数(比如append)实际上都会接受这个参数,并在内存中为它创建一个新的对象,只是为了DOM,然后附加它?因此,例如,如果在附加到DOM之后,我执行:$('div#'+I).css(宽度:0),它将只应用于DOM中的元素,而不是存储在数组中的元素,因为它们是不同的实体。或者它们实际上指向内存中的同一地址,因此修改一个地址也会修改另一个地址吗?@paulsmith看,jQuery只是一种易于使用
DOM
的机制。实际上,只有
DOM
DOMElement
s。因此,当您从
DOM
中删除
DOMElement
时(使用jQuery或smthn-else无法实现),它们不会从jQuery包装器中删除,jQuery包装器存在于
预加载程序
数组中,其中包含对相应
DOMElement
的引用@paulsmith,回答您的问题:“$('div#'+i).css(宽度:0),它将仅将其应用于DOM中的元素”。不,它也将应用于数组中的元素。附加到DOM的元素与数组中的元素相同。检查下面我的答案。