jQuery如何处理页面上不存在的元素?

时间:2012-02-14 22:12:00

标签: jquery

当jQuery搜索元素/绑定到页面上不存在的元素时,我会遇到一个理论问题。

例如,我有一个包含许多Click事件的javascript文件,但是在某些页面上,这些点击事件并未使用。我将大部分代码缩小为一个文件,而不是制作多个javascript文件并重复代码。

$('#target').click(function() {
    alert('Handler for .click() called.');
});

基本上将我的段落总结为几个简单的句子。当id" target"不存在? jquery如何处理这样的情况?

现在,每当我在我的网站上工作时,似乎FireFox的内存使用量就像疯了似的。不确定这是否只是FireFox,但如果我在页面上没有元素,是否会因为不存在的元素绑定而导致内存泄漏?

只是好奇在幕后发生了什么。

谢谢!

5 个答案:

答案 0 :(得分:5)

如果没有元素与您的选择器匹配,您将获得一个空的jQuery对象(一个不包含元素的对象) 在空的jQuery对象上调用除live()之外的任何方法都不会做任何事情,也不会浪费资源。

答案 1 :(得分:2)

jQuery总是适用于元素列表。当选择器与任何东西都不匹配时,你得到一个空列表,并且操作它什么都不做。

将事件附加到不存在的元素,例如实际上没有做任何事情,所以不,这不会泄漏内存。

答案 2 :(得分:2)

$()函数将循环遍历窗口中的元素。如果找到#target,则会添加onclick事件。

如果它不存在,那么什么都不会发生,你将得到一个空的jQuery对象

答案 3 :(得分:0)

元素不存在的结果应该是它不受任何约束,因此点击不存在的元素将不会产生任何影响。

我还想指出,如果通过ajax添加元素并将'#target'元素绑定到特定的单击函数,就像在发布的代码中所做的那样,在ajax调用之前它将不起作用。在这些情况下,您将使用'.live'绑定函数来保证函数绑定到元素。 Firefox也是一种内存耗尽,它的内存使用速度非常快。

答案 4 :(得分:-1)

我理解它的方式,$('#target')选择器不会选择任何东西,因此点击不会绑定到任何元素。它不会导致任何内存问题或任何内容。