【发布时间】:2020-11-12 01:17:21
【问题描述】:
按照previous post,此代码可以正常工作,但我知道这在潮湿的日子里就像太平洋一样干燥。
我很感激任何可以提高效率的建议。
$( "#cvl_mb_services .content-switch" ).each(function(index, el) {
var parent = $(el).parent().parent().attr("id");
var inputValue = $('#' + parent + ' input[type=radio]:checked').val();
var targetBox = '#' + parent + ' .cvl-' + inputValue + '-fields';
$(targetBox).removeClass('cvl-hide');
});
$('#cvl_mb_services .content-switch').on('click', 'input[type="radio"]', function(){
var parent = $(this).parent().parent().parent().parent().parent().parent().attr("id");
var inputValue = $(this).closest('input[type="radio"]').attr("value");
var targetBox = '#' + parent + ' .cvl-' + inputValue + '-fields';
if (inputValue == 'content') {
$('#' + parent + ' .cvl-content-fields').removeClass('cvl-hide');
$('#' + parent + ' .cvl-header-fields').addClass('cvl-hide');
$('#' + parent + ' .cvl-footer-fields').addClass('cvl-hide');
} else if (inputValue == 'header') {
$('#' + parent + ' .cvl-content-fields').addClass('cvl-hide');
$('#' + parent + ' .cvl-header-fields').removeClass('cvl-hide');
$('#' + parent + ' .cvl-footer-fields').addClass('cvl-hide');
} else if (inputValue == 'footer') {
$('#' + parent + ' .cvl-content-fields').addClass('cvl-hide');
$('#' + parent + ' .cvl-header-fields').addClass('cvl-hide');
$('#' + parent + ' .cvl-footer-fields').removeClass('cvl-hide');
}
});
【问题讨论】:
-
我投票结束这个问题,因为它属于codereview.stackexchange.com
-
几个可能的改进:DOM 导航总是最慢的,所以缓存任何 DOM 查找,例如
var parent = $("#" + $(this).parent()....attr("id")); parent.find(".cvl-content-fields, .cvl-header-fields).addClass。使用.closest()而不是.parent().parent().parent(),这样它就不会那么脆弱了。合并类更改(如我之前所示)。但这些都是微小的改进,不会对click处理程序产生太大影响 - 如果您的运行代码每秒运行 1000 次,您会注意到。
标签: javascript jquery performance dry