jQuery函数优化

时间:2013-10-14 14:06:32

标签: jquery performance

有没有办法让它更快?

此函数管理一些动态表单元素。

 function HideAllDivs(parentDiv) {
        var divs = $('#' + parentDiv + ' div'), divsLength = divs.length;   
        for (var a = 0; a < divsLength; a++) {
            var obj = $('#' + divs[a].id);
            obj.find('input[type=radio]:checked').removeProp('checked');
            obj.find('input[type=checkbox]:checked').removeProp('checked');
            obj.find('input[type=text]').val('');
            obj.find('select').val('');
            obj.find('input[type=radio]').each(function () { $(this).removeClass('selectedCtrl');   });
            obj.hide(1);                           
        }    
    }

谢谢, 大卫

3 个答案:

答案 0 :(得分:4)

您可以使用..来快速(略微)加速..

function HideAllDivs(parentDiv) {
    $('#' + parentDiv + ' div')
        .hide()
        .find('input, select')
            .removeProp(':checked') // will be ignored where not applicable
            .removeClass('selectedCtrl') // will be ignored where not applicable
            .filter('input[type="text"], select').val('');
}

答案 1 :(得分:1)

无需使用循环,您可以使用单选按钮

改进2个操作
function HideAllDivs(parentDiv) {
    var divs = $('#' + parentDiv + ' div');

    var radios = divs.find('input[type=radio]')
    radios.filter(':checked').removeProp('checked');
    radios.find('.selectedCtrl').removeClass('selectedCtrl');

    divs.find('input[type=checkbox]:checked').removeProp('checked');
    divs.find('input[type=text], select').val('');
    divs.hide(1);
}

答案 2 :(得分:0)

我认为这应该稍快一些......

function HideAllDivs(parentDiv) {

  var $divs = $('#' + parentDiv + ' div');

  $divs
    .find('input[type=text],select').val('').end()
    .find(':checked').removeProp('checked').end()
    .find('.selectedCtrl[type=radio]').removeClass('selectedCtrl').end()
    .hide(1);
}

以下性能测试
*编辑:失败,我实际上没有运行测试-_-;固定的。*
http://jsperf.com/hiding-divs-19362135