2

在我看来,编写 jQuery 时最重要但最棘手的事情是选择器

您对编写准确的选择器有什么建议?

4

10 回答 10

6

研究手册

于 2009-10-09T14:44:39.547 回答
5

这是我的建议...

将此保存在您的书签中:

http://www.learningjquery.com/2006/11/how-to-get-anything-you-want-part-1

于 2009-10-09T14:43:20.987 回答
5

性能测试你的选择器

是的,我在 Chrome 中的 8 Cores of goodness 对我来说一切都很好。但后来我假装自己是客户并在一台 900 mHz 的 IE6 机器上访问(别笑,我在旁边放了一个来测试这些东西),突然间我可以在选择器需要的时间吃午饭了返回

我从这里更改了一些代码: $('.class, .class2, .class3').show()

像这样: array.push($(this)) ... $(array).show() 并加快了 100 倍

于 2009-10-09T14:48:24.547 回答
4

不是对您的问题的直接回答,但就性能而言,选择器是正确的第二个最重要的事情。

重要的是context参数to $()。如果未提供,jQuery 默认为document. 这意味着您正在遍历整个 DOM树。指定上下文后,jQuery 仅在其下方遍历:

$('whatever'); // scans the entire `document`
$('whatever', element); // scans only within element
于 2009-10-09T14:49:26.040 回答
2

通过使用类装饰器来识别相似元素,使编写选择器变得容易。

 <div class="clickable">.....</div>
 <a class="clickable">...</a>
 <span class="clickable">...</span>

 $('.clickable').click( function() { some common click action } );
于 2009-10-09T14:42:44.933 回答
2

请记住CSS Specificity,因此您不会选择太多或很少的元素。

于 2009-10-09T14:46:14.007 回答
1

看看John Resig 关于 jQuery 的演示文稿,尤其是那些处理其性能的演示文稿。

本质是jQuery从右到左而不是从左到右处理选择器。因此选择器foo bar将选择所有bar元素并过滤以foo元素为祖先的元素,而不是先选择所有foo元素,然后选择每个bar元素的所有foo元素。该技术避免了昂贵的合并。

因此,您的最后一个子选择器应该是最具表现力的,而其他子选择器的表现力可能较差。

于 2009-10-09T16:19:38.077 回答
1

虽然class并且id是最容易计划的,但我发现我越来越关注属性选择器和 jQuery 的伪类。特别是最近不可缺少的两个是:has():not()。如果您知道如何使用属性选择器,它们也非常方便,尽管它们的功能相当有限。我希望在选择器引擎中看到的一项改进是对 的否定:has()和对 的否定[attribute]

于 2009-10-09T14:49:03.233 回答
1

我用过SelectorGadget。只要 HTML 不太复杂,它就可以很好地工作。

于 2009-10-09T14:58:15.577 回答
0

与其他任何事情一样,在使用之前了解该库的工作原理

于 2009-10-09T16:06:47.133 回答