我在$current = $('.current')
代码开头以下列方式声明了一个包含 jQuery 对象的变量。问题是我的班级current
经常更换节点。
这是一个例子
有没有办法在脚本开头声明选择器并使其更加动态。
我在$current = $('.current')
代码开头以下列方式声明了一个包含 jQuery 对象的变量。问题是我的班级current
经常更换节点。
这是一个例子
有没有办法在脚本开头声明选择器并使其更加动态。
不,当您从 DOM 中添加/删除与其选择器匹配的项目时,没有办法声明始终是最新的 jQuery 变量。这不是 jQuery 的特性。
不过,还有许多其他方法可以解决动态创建元素的问题。例如,document.getElementsByClassName()
返回一个活动的 nodeList,它会随着文档的变化而保持最新。而且,当然,您总是可以在使用它之前刷新您的 jQuery 变量,并在任何给定时间对文档中的内容进行新的查询。对于用户触发的任何操作,这是通常的建议,因为刷新查询对于用户时间来说非常快,并且在操作发生的那一刻保证是准确的,并且不存在由于悬空引用而导致内存泄漏的风险。
一般来说,如果 jQuery 变量中的对象是动态创建/删除的,那么将其保留一段时间并不是一个好主意,因为在 jQuery 变量中保留对它们的引用会阻止垃圾收集器从旧对象中清理内存(例如内存泄漏),直到 jQuery 变量本身被删除。
当您声明这样的变量时,它会将 jQuery 对象保存到内存中,直到您释放或更改它。因此,如果您调用它,您将始终获得第一次加载它时的值。
如果你真的需要一个更新的 jQuery 对象,你可以在需要的时候调用它 $('.current'),然后它会重新计算 jQuery 对象,你可以使用当前的一组元素。
但是,如果由于某种我无法想象的原因你真的需要这样做,这对你有用吗:
$current = function(){
return $('.current');
};
然后你可以调用 $current() 并且你会得到你更新的 jQuery 对象。
我再次认为这样做很愚蠢,除非您需要在使用之前以某种方式处理 jquery 对象,否则最好的方法是直接调用 jQuery 对象 $('.current') ,就像我之前提到的那样。 ……简单多了。
修正:如果你有一个非常烦人的长 jQuery 对象来调用常量,我想这可能很有用,比如$('.class').has('.otherClass').find('.thirdClass').children('img.fourthClassIfYouCanBelieveIt:first');
在那种情况下是的,我宁愿打电话给 $current()
如果你的意思是,让变量$current
自行更新,我不这么认为。您最好的选择是在再次设置变量后重新设置它:
.... //your code:
$(this).addClass('current');
$current = $('.current');