【问题标题】:Optimize JQuery优化 JQuery
【发布时间】:2012-09-26 22:50:02
【问题描述】:

优化(缩短)这段代码的最佳方法是什么?我正在使用 Jquery UI 插件“选择菜单”分配给选定数量的元素。

$('footer#footer form select').selectmenu({
    style: 'dropdown',
    appendTo: 'footer#footer form span'
});

$('form.filters section.grid .industry select').selectmenu({
    style: 'dropdown',
    appendTo: 'form.filters section.grid .industry'
});

$('form.filters section.grid .subject select').selectmenu({
    style: 'dropdown',
    appendTo: 'form.filters section.grid .subject'
});

$('form.filters section.grid .year select').selectmenu({
    style: 'dropdown',
    appendTo: 'form.filters section.grid .year'
});


$('form.filters section.grid .organiser select').selectmenu({
    style: 'dropdown',
    appendTo: 'form.filters section.grid .organiser'
});

【问题讨论】:

  • optimise 你的意思是 shorten?
  • 请。 P.S 我的第一只宠物叫 Yoshi :-)

标签: javascript jquery optimization


【解决方案1】:

使用类和[data-*]属性将数据传递给jQuery:

$('select.selectMenu').each(function () {
    $(this).selectmenu({
        style: 'dropdown',
        appendTo: $(this).data('target')
    });
});

这依赖于更改标记,以便选择元素具有正确的类,并将其[data-target] 属性设置为适当的值。

<select class="selectMenu" data-target="footer#footer form span">
    ...options...
</select>

each 正文和 HTML 的几个变体:

使用整个data 对象:

$(this).selectmenu($(this).data());

<select data-style="dropdown" data-append-to="footer#footer form span">

使用一个[data-*] 属性:

$(this).selectmenu($(this).data('selectmenu'));

<select data-selectmenu='{"style":"dropdown","appendTo":"footer#footer form span"}'>

【讨论】:

    【解决方案2】:

    您可以将“选择器”映射到“附加”部分

    var parts = {
        'footer#footer form select'                  : ' span',
        'form.filters section.grid .industry select' : '',
        'form.filters section.grid .subject select'  : '',
        'form.filters section.grid .year select'     : '',
        'form.filters section.grid .organiser select': ''
    };
    
    for (var p in parts) {
        $(p).selectmenu({
            style: 'dropdown',
            appendTo: p.replace(" select", parts[p])
        });
    }
    

    或者你可以这样做。

    $('footer#footer form select').selectmenu({
        style: 'dropdown',
        appendTo: 'footer#footer form select span'
    });
    
    $('form.filters section.grid .row * select').each(function() {
        $(this).selectmenu({
            style: 'dropdown',
            appendTo: $(this).closest('.span3')
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 2011-10-01
      • 2011-12-18
      • 2011-12-13
      • 1970-01-01
      相关资源
      最近更新 更多