2010-10-19 1 views
1

J'utilise dynaTrace pour profiler mon application dans Internet Explorer.Aidez-moi à optimiser cette jQuery: a selector

L'un des appels les plus chers est la suivante:

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

Je SCOPED le sélecteur comme suit, qui a offert un peu d'amélioration:

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

Comment puis-je améliorer les performances plus loin?

REMARQUE: je ne peux pas modifier le balisage HTML, uniquement le JavaScript.

J'utilise jQuery 1.4.2.

UDPATE Voici échantillon HTML ... A noter que dans ma demande réelle, le code HTML est dynamique et le balisage réels différeront:

<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

S'il vous plaît nous montrer le HTML. – SLaks

Répondre

2

Vous devez utiliser un seul sélecteur, comme celui-ci:

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

Sinon, vous lancez plusieurs objets jQuery uniquement pour effectuer une recherche. Vous devrez tester, mais selon les DOM vous travaillez contre, cela peut être beaucoup plus plus rapide (surtout dans jQuery 1.4.3+):

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

Suis-je juste confus ou ne peux-tu pas juste faire $ ('div.containerClass.containerHeader') '... l'élément n'a-t-il pas les deux classes? – Mottie

+0

@fudgey - ': has()' signifie qu'il a un * descendant * avec cette classe :) –

+0

oh duh ... LOL * moment blond * – Mottie

1

Alors qu'il serait stupide si cela est en effet plus rapide, avez-vous essayé:

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

sur edit: Sélecteur parent ajouté.