我怎样才能清理这个javascript jquery

时间:2012-12-20 17:47:01

标签: javascript jquery

我有这两个功能。

第一个写得很好,因为知道如何写js的人做到了。

我做的第二次。

var GetURLParameter = function($param){
    var sPageURL = window.location.search.substring(1);
    var sURLVariables = sPageURL.split('&');
    for(var i = 0; i < sURLVariables.length; i++) {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == $param) {
            return sParameterName[1];
        }
    }
}


if(GetURLParameter('filter')!= "undefined"){
     $('#'+GetURLParameter('filter')).parent().parent().children('li.active').removeClass('active')
     $('#'+GetURLParameter('filter')).parent().addClass('active');
}

我想简化调用,因为我正在重复行GetURLParameter('filter'),但我不知道如何让它像关键字this

一样工作

3 个答案:

答案 0 :(得分:3)

将中间值隐藏在变量中:

var $filter = GetURLParameter('filter');

if($filter != "undefined") { 
    var $parent = $('#' + GetURLParameter('filter')).parent();

    $parent.parent().children('li.active').removeClass('active');
    // better alternative (thanks wirey)
    // $parent.siblings('li.active').removeClass('active')

    $parent.addClass('active');
}

当然,这具有更易读的优点,而且效率更高,因为它不会重新运行相同的功能或多次查询DOM。

答案 1 :(得分:0)

//假设您有ul,您也可以替换为ol

if(GetURLParameter('filter')!= "undefined"){    
    var $mydiv = $('#'+GetURLParameter('filter'));
    $mydiv.closest('ul').children('li.active').removeClass('active');
    $mydiv.parent().addClass('active');    
}

答案 2 :(得分:0)

$( function () {
   if( GetURLParameter( 'filter' ) != 'undefined' ) {
      var filter = $( '#' + GetURLParameter( 'filter' ) ).parent();
      filter.parent().children( 'li.active' ).removeClass( 'active' );
      filter.addClass( 'active' );
   }
} );

虽然我想说还有更多方法可以让这段代码变得更好。