在我看来,编写 jQuery 时最重要但最棘手的事情是选择器。
您对编写准确的选择器有什么建议?
研究手册。
性能测试你的选择器
是的,我在 Chrome 中的 8 Cores of goodness 对我来说一切都很好。但后来我假装自己是客户并在一台 900 mHz 的 IE6 机器上访问(别笑,我在旁边放了一个来测试这些东西),突然间我可以在选择器需要的时间吃午饭了返回。
我从这里更改了一些代码: $('.class, .class2, .class3').show()
像这样: array.push($(this)) ... $(array).show() 并加快了 100 倍
不是对您的问题的直接回答,但就性能而言,选择器是正确的第二个最重要的事情。
最重要的是context
参数to $()
。如果未提供,jQuery 默认为document
. 这意味着您正在遍历整个 DOM树。指定上下文后,jQuery 仅在其下方遍历:
$('whatever'); // scans the entire `document`
$('whatever', element); // scans only within element
通过使用类装饰器来识别相似元素,使编写选择器变得容易。
<div class="clickable">.....</div>
<a class="clickable">...</a>
<span class="clickable">...</span>
$('.clickable').click( function() { some common click action } );
请记住CSS Specificity,因此您不会选择太多或很少的元素。
看看John Resig 关于 jQuery 的演示文稿,尤其是那些处理其性能的演示文稿。
本质是jQuery从右到左而不是从左到右处理选择器。因此选择器foo bar
将选择所有bar
元素并过滤以foo
元素为祖先的元素,而不是先选择所有foo
元素,然后选择每个bar
元素的所有foo
元素。该技术避免了昂贵的合并。
因此,您的最后一个子选择器应该是最具表现力的,而其他子选择器的表现力可能较差。
虽然class
并且id
是最容易计划的,但我发现我越来越关注属性选择器和 jQuery 的伪类。特别是最近不可缺少的两个是:has()
和:not()
。如果您知道如何使用属性选择器,它们也非常方便,尽管它们的功能相当有限。我希望在选择器引擎中看到的一项改进是对 的否定:has()
和对 的否定[attribute]
。
我用过SelectorGadget。只要 HTML 不太复杂,它就可以很好地工作。
与其他任何事情一样,在使用之前了解该库的工作原理。