javascript - 链接同名类,这样当一个被点击时,另一个被赋予一个类

标签 javascript jquery html css code-cleanup

基本上,我是在寻求一种优化此代码的方法。我想将其缩减为几行,因为它对每次点击绑定(bind)都执行相同的操作。

    $("#arch-of-triumph-button").click(function(){
        $("#arch-of-triumph-info").addClass("active-info")
    });
    $("#romanian-athenaeum-button").click(function(){
        $("#romanian-athenaeum-info").addClass("active-info")
    });
    $("#palace-of-parliament-button").click(function(){
        $("#palace-of-parliament-info").addClass("active-info")
    });

有没有办法将“arch-of-triumph”、“romanian-athenaeum”、“palace-of-parliament”存储到一个数组中,然后将它们拉出到一个点击绑定(bind)中?我在想可能是一些串联?

$("+landmarkName+-button").click(function(){
    $("+landmarkName+-info").addClass("active-info")
});

这样的事情有可能吗? 预先感谢您的所有回答。

编辑:这是完整的 HTML。

        <div class="landmark-wrapper">
            <div class="page-content landmark">
                <div class="heading span-after">
                    <span>Arch of Triumph</span>
                </div>
                <div class="landmark-button" id="arch-of-triumph-button"></div>                 
            </div>
        </div>
        <div class="landmark-wrapper">
            <div class="page-content landmark">
                <div class="heading span-after">
                    <span>Romanian Athenaeum</span>
                </div>
                <div class="landmark-button" id="romanian-athenaeum-button"></div>                  
            </div>
        </div>


----------------------------------------------------------

        <div class="landmarks-info-wrapper">
            <div class="landmark-info" id="arch-of-triumph-info">
                <div class="info-landmark section">
                    <span class="landmark-title">Arch of Triumph</span>
                    <span class="landmark-coord">44°28′1.99″N 26°4′41.06″E</span>
                </div>
            </div>
            <div class="landmark-info" id="romanian-athenaeum-info">
                <div class="info-landmark section">
                    <span class="landmark-title">The Romanian Athenaeum</span>
                    <span class="landmark-coord">44.4413°N 26.0973°E</span>

                </div>
            </div>

最佳答案

假设您无法修改您的 HTML 标记(在这种情况下使用 CSS 类会更清晰),您的问题的解决方案如下所示:

// Assign same click handler to all buttons
$("#arch-of-triumph-button, #romanian-athenaeum-button, #palace-of-parliament-button")
.click(function() {

  // Extract id of clicked button
  const id = $(this).attr("id");

  // Obtain corresponding info selector from clicked button id by replacing
  // last occurrence of "button" pattern with info.
  const infoSelector = "#" + id.replace(/button$/gi, "info");

  // Add active-info class to selected info element
  $(infoSelector).addClass("active-info");
});

关于javascript - 链接同名类,这样当一个被点击时,另一个被赋予一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59096846/

相关文章:

php - 在 jQuery click 中运行 php 函数

javascript - 通过更新变量更新 D3 图表的大小

jquery - 如何保留数据属性的大小写?

javascript - 简单图像幻灯片上的随机动画

javascript - 如何动态渲染美人鱼流程图?

javascript - 如何设置 Google Chrome 语音输入控件的麦克风样式

javascript - 在 Chrome 中将光标属性重置为 "grab"不起作用

jquery - 为什么这不适用于 jQuery 1.9?

javascript - jQuery ajax() 使用成功、错误和完成与 .done()、.fail() 和 always()

javascript - 使用 Javascript AngularJS 显示从当天起接下来的 365 天