.load() 被重载,其行为完全不同,具体取决于传递的参数
.toggle() 被重载,其行为完全不同,具体取决于传递的参数
jQuery() 函数可能重载过多。
你提到的.attr()。与属性的区别应该是立即 IMO。
.map( key,val ) 但$.map( val,key ) 和this 的值不同。
应该将非标准选择器排除在 Sizzle IMO 之外。基于 Javascript 的选择器引擎应该会在几年内过时,而迷上专有选择器的人将面临更困难的过渡
.closest() 或 .live() 等方法的方法命名不佳。他们具体是做什么的?
我最近发现,在创建新元素时,不能通过 props 参数设置标准的 width 和 height 属性。 jQuery 运行自己的 width 和 height 方法。 IMO,规范属性应该被优先考虑,特别是因为width和height可以通过css设置。
$('<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 种行为,但它们的区别可能令人困惑
// v---get index v---from collection (siblings is implied)
$('selector').index();
// v---from collection v---get index
$('selector').index(element);
// v---get index v---from collection
$('selector').index('selector');
第一个是可以理解的,如果你记得它只对第一个元素起作用
第二个最有意义,因为 jQuery 方法通常对整个集合进行操作。
第三个完全令人困惑。该方法没有指明哪个选择器是集合,哪个选择器代表您想要从集合中获得索引的元素。
为什么不直接取消第三个,让人们像这样使用第二个:
// v---from collection v---get index
$('selector').index( $('selector') );
这样,它更适合 jQuery 的其余部分,.index() 对整个集合进行操作。
或者至少颠倒选择器的含义以更好地适应:
// v---from collection v---get index
$('selector').index('selector');
不管怎样,还有一个要考虑的。
我对 jQuery 的事件处理/数据存储系统有些担心。它之所以受到称赞,是因为它没有向 on[event] 属性添加可以关闭其他元素的函数,从而在 IE 中造成内存泄漏。相反,它放置了一个轻量级的 expando 属性,该属性映射到 jQuery.cache 中的一个条目,该条目包含处理程序和其他数据。
我相信它会附加一个处理程序,然后调用您分配的处理程序。或者类似的东西。
无论系统是什么并不重要。关键是元素和jQuery.cache 之间的连接就是expando。
为什么这很重要?从哲学上讲,jQuery 不是一个框架。这是一个图书馆。看起来,作为一个库,您应该能够使用或不使用 jQuery 函数而不用担心负面影响。然而,如果你在从 DOM 中删除元素时离开 jQuery,你就会通过 expando 孤立任何处理程序和与这些元素相关联的其他数据,从而产生一个很好的完全跨浏览器的内存泄漏。
例如,像el.innerHTML = '' 这样简单的事情可能非常危险。
将此与jQuery.noConflict() 功能结合使用。这使开发人员能够将 jQuery 与其他使用 $ 全局命名空间的库一起使用。那么如果其中一个库删除了一些元素怎么办?同样的问题。我有一种感觉,需要在 jQuery 旁边使用像 Prototypejs 这样的库的开发人员可能没有足够的 JavaScript 知识来做出好的设计决策,并且会遇到我所描述的这样的问题。
就图书馆的预期理念的改进而言,据我所知,他们的理念是“做多,少写”之类的。我认为他们做得很好。您可以编写一些非常简洁但富有表现力的代码来完成大量工作。
虽然这非常好,但在某种程度上我认为它是负面的。你可以做这么多,这么容易,初学者很容易写一些很糟糕的代码。我认为如果有一个“开发人员构建”记录滥用库的警告会很好。
一个常见的例子是在循环中运行选择器。 DOM 选择很容易做到,看起来你每次需要一个元素时都可以运行一个选择器,即使你只是运行了那个选择器。我认为jQuery() 函数可以记录选择器的重复使用,并在控制台提示可以缓存选择器。
因为 jQuery 如此占主导地位,我认为如果他们不仅可以轻松成为一名 JavaScript/DOM 程序员,而且还能帮助你成为更好的程序员,那将是一件好事。