正则表达式的替代方法隐藏匹配的id元素?

时间:2012-11-30 18:51:50

标签: javascript jquery jquery-ui jquery-ui-slider

考虑这个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>

我想隐藏#plan

中的所有计划(计划1,计划2,计划3,计划4)

我使用了正则表达式[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');
    },
});

什么是替代方式?

2 个答案:

答案 0 :(得分: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';
        }
    },
});
​

答案 1 :(得分:2)

您可以使用父ID计划缩短匹配元素的范围。

$('#plan [id^=plan-]').addClass('plan-hide');