.load()
的行为会因传入的参数而完全不同。
.toggle()
的行为会因传入的参数而完全不同。
或许 jQuery()
函数的过载太多了。
你提到了 .attr()
。我认为应该立即区分它与属性的区别。
.map(key, val)
但是 $.map(val, key)
,且 this
值不同。
非标准选择器应该被排除在 Sizzle 之外。基于 JavaScript 的选择器引擎在未来几年内可能会过时,而沉迷于专有选择器的人将会更加困难地进行过渡。
方法的命名不好,例如 .closest()
或 .live()
。它们到底是做什么的?
我最近发现,在创建新元素时,无法通过使用 props
参数设置标准的 width
和 height
属性,而是要使用 jQuery 自己的 width
和 height
方法。我认为规范属性应该优先考虑,特别是因为可以通过 css
设置 width
和 height
。
$('<img/>', {
css:{width:100, height:100},
width:100, // <-- calls method, why?
height:100, // <-- calls method, why?
});
$.get()
和.get()
是完全不同的。
当没有传递参数时,.get()
和.toArray()
是相同的。
toArray()
和$.makeArray()
实际上执行相同的操作。为什么它们没有像.each()
和$.each()
一样被赋予相同的名称?
两种不同的事件委托方法。.delegate()
是明智的选择,而.live()
是神奇的“哇,它只是起作用了!”
.index()
具有3种行为重载,但它们的区别可能会让人感到困惑。
$('selector').index();
$('selector').index(element);
$('selector').index('selector');
第一个例子只对第一个元素操作,如果记住这一点就容易理解了。
第二个例子是最有意义的,因为jQuery方法通常会在整个集合上操作。
第三个例子非常令人困惑。该方法没有指示哪个选择器是集合,哪个选择器代表您想要从集合中获取索引的元素。
为什么不干脆取消第三个方法,让人们像这样使用第二个方法:
// v
$('selector').index( $('selector') );
这样做可以使其更加贴近于 jQuery 的其他部分,其中 .index()
作用于整个集合。
或者至少将选择器的含义反转,以更好地适应:
// v
$('selector').index('selector');
无论如何,这是另一个需要考虑的问题。
我对jQuery的事件处理/数据存储系统有一些担忧。人们赞扬它不会向on[event]
属性添加可以关闭其他元素的函数,在IE中造成内存泄漏。相反,它放置了一个轻量级的扩展属性,它映射到jQuery.cache
中的一个条目,该条目包含处理程序和其他数据。
我相信它随后附加了一个处理程序,然后调用了您分配的处理程序。或者类似于那样的东西。
无论系统是什么,都不重要。关键是元素与jQuery.cache
之间的连接就是那个扩展的属性。
为什么这很重要?哲学上,jQuery不是一个框架,而是一个库。作为一个库,你应该能够使用或不使用jQuery函数,而不必担心负面影响。然而,如果您在删除DOM中的元素时走出jQuery,您将通过扩展程序孤立任何处理程序和其他与这些元素相关联的数据,从而创建一个漂亮且完全跨浏览器的内存泄漏问题。
因此,例如el.innerHTML = ''
这样简单的东西可能非常危险。
再加上jQuery.noConflict()
功能。这使开发人员可以在使用其他利用全局命名空间$
的库时使用jQuery。好吧,如果其中一个库删除了一些元素怎么办?同样的问题。我有一种感觉,需要同时使用Prototypejs
和jQuery的开发人员可能不了解足够的JavaScript知识来做出良好的设计决策,并且将受到我所描述的此类问题的影响。
就图书馆的预期哲学改进而言,据我所知,他们的哲学是“做更多,写更少”之类的。我认为他们做得非常好。您可以编写一些非常简洁但富有表现力的代码,这些代码将完成大量工作。
虽然这非常好,但从某种意义上说,我认为它具有一定的负面影响。你可以很容易地做很多事情,所以即使是初学者也很容易写出很糟糕的代码。我认为如果有一个“开发人员构建”,记录了库的误用警告,这将是有益的。
一个常见的例子是在循环中运行选择器。DOM选择非常容易做到,似乎您每次需要元素时都可以运行选择器,即使您刚刚运行了该选择器。我认为一种改进是让jQuery()
函数记录对选择器的重复使用,并提供控制台备注,说明可以缓存选择器。
由于jQuery如此占主导地位,我认为他们不仅应该使成为JavaScript / DOM程序员易如反掌,而且还应帮助您成为更好的程序员。