2012-04-07 69 views
2

我有一个jQuery选择:如何更改jQuery中逻辑OR的优先级?

div div ul li.normal a, div div ul li.massive a 

是否有逻辑上等同选择这样的:

div div ul (li.normal, li.massive) a 

任何更好的解决方案比:

$('div div ul li').filter('.normal, .massive').find('a') 
+2

不知道这样的事情。另一种方法是过滤器。 '$('div div ul a')。filter('li.normal,li.massive')' – mrtsherman 2012-04-07 03:31:53

+0

@mrtsherman。不起作用。 '过滤器'只对当前的元素集进行操作。 – kev 2012-04-07 03:38:27

+0

你是对的,jmort253很好,可以发布正确的方式来使用过滤器在这种情况下。 – mrtsherman 2012-04-07 04:08:52

回答

2

这是真正的个人喜好,并涉及有关您的应用程序随着时间的推移可能会改变的详细信息。如果我想到两个选择,以在未来的分歧,我可以用逗号让他们完全独立的,就像这样:

$('div div ul li.normal a, div div ul li.massive a') 

不过,如果没有任何计划改变结构,在你的榜样问题会很好。

如果您一直怀疑选择器的速度,可以在其周围放置一些时间代码,并比较哪个选择器更快。

Multiple Attribute Selector基本上是与OR相当的jQuery选择器。在说明文档中:

选择所有指定选择器的组合结果。

它可以在元素选择,类选择,ID选择,属性选择的任意组合使用等

因此,如果你想坚持100%DRY原则,你的例子似乎是最简化的版本:

// -----------------------[ normal || .massive ]-------- 
$('div div ul li').filter('.normal, .massive').find('a') 
+0

我只是因为没有遵循DRY原则而感到不适。 – kev 2012-04-07 03:42:12

+0

这是一个设计决定,而DRY是有疑问时的一般准则。我与一位改变了很多事情的设计师密切合作,当我们在HTML结构中挖掘出一些分歧时,我们发现我们的改变能够很好地协同工作。一般来说,我喜欢你的问题的解决方案,并相信这将工作得很好。 – jmort253 2012-04-07 03:47:07