0

如果我有修改页面上 DOM 元素的函数,但$(document).ready()也访问相同的 DOM 元素,我是否包装了所有内容,包括其中的函数,$(document).ready()所以我不会多次声明 dom 元素。例如:

function addContent(){
   var $someElement = $("someElement");
   //Do something with $someElement
}
$(document).ready(function(){
   var $someElement = $("someElement");
   $someElement.click(function(){ //some code });
})

我会在两者之间移动addContent()函数$(document).ready()以便我只需要声明$someElement 一次吗?

4

5 回答 5

1

addContent()只需要$(document).ready(function(){})在全局范围内的 if 之外。选择器也是如此。

如果可能的话,我个人不会将它们中的任何一个放在全局范围内,这意味着没有onclick=属性。

于 2012-08-01T21:25:19.550 回答
0

基本上,如果你这样做,调用函数的所有内容都必须在 范围内$(document).ready(),因此有好处也有坏处。由你决定哪个更好。正如 Kevin B 所说,我个人可能更希望它们被隐藏在那个范围之外,所以我会把它们放在里面。

于 2012-08-01T21:27:35.540 回答
0

如果您不需要将 jquery 与函数一起使用,请在函数之外使用它

$(document).ready(function(){})
于 2012-08-01T21:27:54.140 回答
0

我的印象是 jquery 开始缓存对同一个选择器的访问(至少它不再抱怨我们必须自己缓存它们)所以多次调用 $(".some") 是可以的。另一方面,如果您在类的上下文中并且知道 $(".some") 将始终返回相同的对象集 - 将其存储在类变量中是安全的。而且由于全局变量是邪恶的 - 将它存储在其中一个中并不是一个好主意。

于 2012-08-01T21:31:29.860 回答
0
// declared in global scope
var $someElement = null;

function addContent(){
   //Do something with $someElement
   $someElement.html('works!');
}

$(document).ready(function(){
   //initialized on ready
   $someElement = $("someElement");
   $someElement.click(function(){ //some code });
});

您可以将变量设置为全局范围,并在.ready. 假设addContent总是在触发后.ready触发,这不会导致任何问题,但这是一个非常安全的假设,因为您打算使用 jQuery 操作 dom,并且总是在.ready

于 2012-08-01T21:41:47.587 回答