我正在使用dynaTrace在Internet Explorer中配置我的应用程序。
最昂贵的电话之一如下:
$("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>
答案 0 :(得分:2)
您应该使用单个选择器,如下所示:
$("#section-wrapper div.containerClass:has(div.containerHeader)")
否则,您只是为了执行查找而启动了多个jQuery对象。您必须进行测试,但根据您正在使用的DOM,这可能会更快 (尤其是在jQuery 1.4.3 +中):
$("#section-wrapper div.containerHeader").closest("div.containerClass")
答案 1 :(得分:1)
虽然如果这确实更快会很愚蠢,但你试过了吗?
$("div.containerClass > div.containerHeader").parents('div.containerClass')
on edit:添加了父选择器。