0

我有这两个功能。

第一个写得很好,因为知道如何编写 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

4

3 回答 3

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。

于 2012-12-20T17:50:09.360 回答
0

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

if(GetURLParameter('filter')!= "undefined"){    
    var $mydiv = $('#'+GetURLParameter('filter'));
    $mydiv.closest('ul').children('li.active').removeClass('active');
    $mydiv.parent().addClass('active');    
}
于 2012-12-20T17:50:44.500 回答
0
$( function () {
   if( GetURLParameter( 'filter' ) != 'undefined' ) {
      var filter = $( '#' + GetURLParameter( 'filter' ) ).parent();
      filter.parent().children( 'li.active' ).removeClass( 'active' );
      filter.addClass( 'active' );
   }
} );

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

于 2012-12-20T17:53:27.783 回答