1

考虑这个 HTML:

<div id=plan>
  <div id="plan-1" class='plan-hide'>One</div>
  <div id="plan-2" class='plan-hide'>Two</div>
  <div id="plan-3">Three</div>
  <div id="plan-4" class='plan-hide'>Four</div>
</div>

我想隐藏所有计划(计划 1、计划 2、计划 3、计划 4)#plan

我用过正则表达式[id^=plan-],但我相信它很慢。

$("#slider").slider({
    range: "min",
    min: 0,
    max: 4
}, {
    slide: function( event, ui ) {
        $("[id^=plan-]").addClass('plan-hide');
        $("#plan-" + (ui.value+1)).removeClass('plan-hide');
    },
});

什么是替代方式?

4

2 回答 2

3

如果您尝试将该类添加到容器中的所有元素中,除了与 ui 值 + 1 匹配的元素之外,定位所有兄弟元素可能更快:

    slide: function( event, ui ) {
        $("#plan-" + (ui.value+1)).removeClass('plan-hide')
                                  .siblings().addClass('plan-hide');
    },

甚至只是:

    slide: function( event, ui ) {
        $('#plan').children('div').addClass('plan-hide');
        $("#plan-" + (ui.value+1)).removeClass('plan-hide');
    },

并且可能是最快的:

var elems = document.getElementById('plan').getElementsByTagName('div'),    
    len = elems.length;

$("#slider").slider({
    range: "min",
    min: 0,
    max: 4
}, {
    slide: function( event, ui ) {
        for (var i=0; i<len; i++) {
            elems[i].className = elems[i].id.indexOf(ui.value+1) != -1 ? '' : 'plan-hide';
        }
    },
});
​
于 2012-11-30T19:00:15.880 回答
2

您可以使用 parent id plan 来缩短匹配元素的范围。

$('#plan [id^=plan-]').addClass('plan-hide');
于 2012-11-30T18:56:18.783 回答