帮我优化这个jQuery:有选择器

时间:2010-10-19 00:37:03

标签: javascript jquery performance internet-explorer

我正在使用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>

2 个答案:

答案 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:添加了父选择器。