2010-10-19 77 views
1

我使用dynaTrace来在Internet Explorer中剖析我的应用程序。帮我优化这个jQuery:有选择器

其中最昂贵的电话如下:

$("div.containerClass:has(div.containerHeader)") 

我范围的选择如下,它提供了一个小的改进:

$("div.containerClass:has(div.containerHeader)", "#section-wrapper") 

我如何可以提高性能进一步?

注:我不能更改HTML标记,只有JavaScript。

我正在使用jQuery 1.4.2。

UDPATE 下面是示例HTML ...请注意,在我的实际应用中,HTML是动态的,实际的标记会有所不同:

<div id="section-wrapper"> 
    <div class="somethingelse"> 
     <div class="somethingelse2"> 
      <div class="containerClass"> 
      <div class="containerHeader"> 
       <h2>content region 1</h2> 
      </div> 
      </div> 

      <div class="containerClass"> 
      <div> 
       <h2>content region 2</h2> 
      </div> 
      </div> 

      <div class="containerClass"> 
      <div class="containerHeader"> 
       <h2>content region3 </h2> 
      </div> 
      </div> 

      <div class="containerClass"> 
      <div class="containerHeader"> 
       <h2>content region 4</h2> 
      </div> 
     </div> 
    </div> 
</div> 
+3

请向我们展示HTML。 – SLaks 2010-10-19 00:39:52

回答

2

你应该使用一个单一的选择,就像这样:

$("#section-wrapper div.containerClass:has(div.containerHeader)") 

否则,你会引发多个jQuery对象来执行查找。你必须要考,但取决于你对工作的DOM,这可能是快(尤其是jQuery的1.4.3+):

$("#section-wrapper div.containerHeader").closest("div.containerClass") 
+0

我只是困惑,或者你不能只是做'$('div.containerClass.containerHeader')'...不是这个元素有两个类? – Mottie 2010-10-19 02:47:33

+0

@fudgey - ':has()'表示它有一个*后裔*与该类:) – 2010-10-19 02:49:09

+0

oh duh ...大声笑*金发时刻* – Mottie 2010-10-19 02:50:30

1

虽然这将是愚蠢的,如果这是确实更快,你试过了:

$("div.containerClass > div.containerHeader").parents('div.containerClass') 

on编辑:添加了父选择器。