JavaScript 重构/避免重复

标签 javascript jquery coding-style

我需要重构它以避免代码重复。

$('#showmore-towns').toggle(
    function() {
        $('.popularTownsAdditional').show();
        console.log(this);
        $('#showmore-town .showless').show();
        $('#showmore-town .showmore').hide();
        $('#showmore-town').removeClass('sd-dark28').addClass('sd-dark28down');
        return false;
    },
    function() {
        $('.popularTownsAdditional').hide();
        $('.showless').hide();
        $('.showmore').show();
        $('#showmore-towns').addClass('sd-dark28').removeClass('sd-dark28down');
    });

$('#showmore-cities').toggle(
    function() {
        $('.popularCitiesAdditional').show();
        $('#showmore-cities .showless').show();
        $('#showmore-cities .showmore').hide();
        $('#showmore-cities').removeClass('sd-dark28').addClass('sd-dark28down');
        return false;
    },
    function() {
        $('.popularCitiesAdditional').hide();
        $('#showmore-cities .showless').hide();
        $('#showmore-cities .showmore').show();
        $('#showmore-cities').addClass('sd-dark28').removeClass('sd-dark28down');
    });

基本上,它显示相同的功能,但仅在具有不同 ID 的不同 div 上。

最佳答案

可能只需要引用一两个命名函数而不是匿名函数。

function showStuff(typeToShow) {
    $('.popular' + typeToShow + 'Additional').show();
    $('#showmore-' + typeToShow + .showless').show();
    $('#showmore-' + typeToShow + .showmore').hide();
    $('#showmore-' + typeToShow).removeClass('sd-dark28').addClass('sd-dark28down');
    return false;
}

function hideStuff(typeToHide) {
    $('.popular' + typeToHide + 'Additional').hide();
    $('#showmore-' + typeToHide + .showless').hide();
    $('#showmore-' + typeToHide + .showmore').show();
    $('#showmore-' + typeToHide ).addClass('sd-dark28').removeClass('sd-dark28down');
}

注意:a) 您可能可以使这些方法变得更巧妙一些,但您明白了! 注意:b) 如果您想使用建议的替换,则需要将“#showmore-town”重命名为“#showmore-towns”(带 S)。

然后在您的切换中您可以引用这些函数:

$('#showmore-towns').toggle(showStuff(towns),
hideStuff(towns));

$('#showmore-cities').toggle(showStuff(cities),
hideStuff(cities));

关于JavaScript 重构/避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11733139/

相关文章:

javascript - 如何在threejs中为相机添加datgui控件?

javascript - 如何在knockoutjs中访问表单输入

javascript - 使用 jQuery 添加 iframe 从 HTTP 到 HTTPS

C++ 风格——const T& 与 T const&

使用 dict 时的 python 语法

javascript - 使用 Javascript 在按钮单击时执行 2 个函数

javascript - Sequelize with PostgreSQL 中与外键约束的丰富自关联

javascript - Bootstrap 响应式表格滚动条顶部/底部且始终可见

javascript - 数据表用一个空格替换 2+ 个空格 + 我可以停止吗?

java - 使用 Intellij IDEA 的代码样式