当jQuery搜索元素/绑定到页面上不存在的元素时,我会遇到一个理论问题。
例如,我有一个包含许多Click事件的javascript文件,但是在某些页面上,这些点击事件并未使用。我将大部分代码缩小为一个文件,而不是制作多个javascript文件并重复代码。
$('#target').click(function() {
alert('Handler for .click() called.');
});
基本上将我的段落总结为几个简单的句子。当id" target"不存在? jquery如何处理这样的情况?
现在,每当我在我的网站上工作时,似乎FireFox的内存使用量就像疯了似的。不确定这是否只是FireFox,但如果我在页面上没有元素,是否会因为不存在的元素绑定而导致内存泄漏?
只是好奇在幕后发生了什么。
谢谢!
答案 0 :(得分:5)
如果没有元素与您的选择器匹配,您将获得一个空的jQuery对象(一个不包含元素的对象)
在空的jQuery对象上调用除live()
之外的任何方法都不会做任何事情,也不会浪费资源。
答案 1 :(得分:2)
jQuery总是适用于元素列表。当选择器与任何东西都不匹配时,你得到一个空列表,并且操作它什么都不做。
将事件附加到不存在的元素,例如实际上没有做任何事情,所以不,这不会泄漏内存。
答案 2 :(得分:2)
$()函数将循环遍历窗口中的元素。如果找到#target,则会添加onclick事件。
如果它不存在,那么什么都不会发生,你将得到一个空的jQuery对象
答案 3 :(得分:0)
元素不存在的结果应该是它不受任何约束,因此点击不存在的元素将不会产生任何影响。
我还想指出,如果通过ajax添加元素并将'#target'元素绑定到特定的单击函数,就像在发布的代码中所做的那样,在ajax调用之前它将不起作用。在这些情况下,您将使用'.live'绑定函数来保证函数绑定到元素。 Firefox也是一种内存耗尽,它的内存使用速度非常快。
答案 4 :(得分:-1)
我理解它的方式,$('#target')选择器不会选择任何东西,因此点击不会绑定到任何元素。它不会导致任何内存问题或任何内容。