我最近一直在开发一些JS重型网站,虽然我赞成大部分时间使用纯JS,jQuery毫无疑问有其用途,我现在主要依靠它来主要用于快速事件绑定/冒泡。我的问题是关于使用jQuery缓存对象以及如何最好地使用它们。
我发现自己在大多数js脚本中都按照这些方式做了一些事情。
jQuery.noConflict();
var doc = jQuery(document), // Root jQ object
html = doc.children('html'), // Mainly to check modernizr classes
container = html.find('.container'); // Base content container
/** module 1 **/
(function($, w, undefined) {
container.on('click', 'button', function(e) {
...
});
})(jQuery, window);
/** module 2 **/
(function($, w, undefined) {
container.on('click', 'a.module', function(e) {
// Occasionally creating further jQ objects in contextual situations
var self = $(this);
// Or is this better
var clicked = container.find(this);
});
})(jQuery, window);
正如你所看到的,我只有一个高级jQuery对象,我用它来遍历DOM,同时偶尔创建上下文需要它的新jQuery对象。我玩弄了使用插件jQuery.single
的想法虽然我并不觉得有必要。
这实际上对我有什么好处,我觉得它更好,因为我只使用jQuery single创建最少数量的jQuery对象(参见第二个模块代码),尽管我不能确定。我希望这里的某个人能够阐明这是否可行,或者我是否应该坚持以前的方法,在每个闭包中创建jQuery对象?
我以前的方法示例
/** module 1 **/
(function($, w, undefined) {
var container = $('.container');
container.on('click', 'button', function(e) {
...
});
})(jQuery, window);
/** module 2 **/
(function($, w, undefined) {
var container = $('.container');
container.on('click', 'a.module', function(e) {
// Occasionally creating further jQ objects in contextual situations
var self = $(this);
});
// Usually if I needed anything further outside the container
// If create further objects
var header = $('header');
})(jQuery, window);