【问题标题】:How to improve this code in intelligente way in Jquery to change the background code of DIV如何在 Jquery 中以智能方式改进此代码以更改 DIV 的后台代码
【发布时间】:2011-06-09 10:42:59
【问题描述】:

当用户单击 DIV 时,我有 6 个 div,它会显示 div 的内容。 (我正在使用 ASPX - Ajaxtabpanel)。

在下面我想出了 div 的名称,我在下面做的是,当点击一个 DIV 时,更改背景颜色。所以 Active div 得到另一种颜色。下面我有 JQuery 代码它可以工作,但我确信它可以以更好的方式完成.. 我可以做些什么来改进代码以使用更好的 Jquery 功能?

您可能会看到,所有 DIV 名称都以相同的约定开头...只是这些中间词是不同的 Algemeen、Juridisch、Fiscaal、Economisch、Veiligheid...

请指教如何改进代码....

<script language="javascript" type="text/javascript">

function resetColor() {
//set all background colors of Div to blue
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelAlgemeen_tab .ajax__tab_outer").css("background-color", "#edf2fb");
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelJuridisch_tab .ajax__tab_outer").css("background-color", "#edf2fb");
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelSociaal_tab .ajax__tab_outer").css("background-color", "#edf2fb");
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelFiscaal_tab .ajax__tab_outer").css("background-color", "#edf2fb");
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelEconomisch_tab .ajax__tab_outer").css("background-color", "#edf2fb");
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelVeiligheid_tab .ajax__tab_outer").css("background-color", "#edf2fb");
}

$(document).ready(function() {

  //Change the ACTIVE div background color

    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelAlgemeen_tab").click(function() {
        resetColor();
        $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelAlgemeen_tab .ajax__tab_outer").css("background-color", "#80FE80");
    });
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelJuridisch_tab").click(function() {
    resetColor();
        $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelJuridisch_tab .ajax__tab_outer").css("background-color", "#80FE80");
    });
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelSociaal_tab").click(function() {
    resetColor();
        $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelSociaal_tab .ajax__tab_outer").css("background-color", "#80FE80");
    });
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelFiscaal_tab").click(function() {
    resetColor();
        $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelFiscaal_tab .ajax__tab_outer").css("background-color", "#80FE80");
    });
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelEconomisch_tab").click(function() {
    resetColor();
        $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelEconomisch_tab .ajax__tab_outer").css("background-color", "#80FE80");
    });
    $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelVeiligheid_tab").click(function() {
    resetColor();
        $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelVeiligheid_tab .ajax__tab_outer").css("background-color", "#80FE80");
    });
});

【问题讨论】:

    标签: javascript jquery-ui jquery jquery-selectors


    【解决方案1】:
    $(function () {
            $("span[id$='_tab']", "#<%= TabContainer1.ClientID %>").click(
            function () {
                $(".ajax__tab_outer", "#<%= TabContainer1.ClientID %>").css("background-color", "#edf2fb");
                $(".ajax__tab_outer", this).css("background-color", "#80FE80");
            });
        });
    

    (固定)

    【讨论】:

    • 这是迄今为止最好的答案,我只建议你解释一下这里发生了什么。此外,.ajax__tab_outer 集合可以分配给该函数之外的变量,以避免重复查找类名元素。
    • 我也想知道这里发生了什么。 :)
    • "" 这是一个jsp scriptlet..如果他有硬代码ID,那又是什么呢?
    • 实际上这里错过了一个重要的问题标签,它是与 ASP.NET 相关的问题。据我了解,它的 TabContainer 控件来自 AjaxControlToolkit 库。 “”它是一个常见的 ASP.NET 客户端表达式,用于在客户端评估服务器控件 ID。
    • @HalfTrackMindMan:我复制了代码,但是当我点击 thidv 时它并没有改变颜色。确实是 Ajaxcontrolpanel。 为什么它不改变颜色???
    【解决方案2】:

    如果这些是唯一使用类 ajax__tab_outer 的 div,你可以这样做:

    <script language="javascript" type="text/javascript">
    function resetColor() {
       $(".ajax__tab_outer").css("background-color", "#edf2fb");
    }
    
    function changeColor() {
       resetColor();
       $(this).find(".ajax__tab_outer").css("background-color", "#80FE80");
    }
    
    $(document).ready(function() {
       // Bind all the divs to the changeColor function
       $("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanelVeiligheid_tab").click(changeColor);
       ...
    }
    </script>
    

    【讨论】:

    • 在你的$(document).ready中,你也可以通过"$('.ajax__tab_outer').click(changeColor);"绑定changeColor函数我认为...
    • 我更喜欢更改类名而不是 css 属性,例如,“选择”和“未选择”类,它们的背景属性在 css 中......在 javascript 中,您更改类名。这样设计师可以在不知道 jquery/javascript 的情况下改变网站的外观。
    • 好的..这段代码正在工作......无论如何也可以使 document.ready 中的代码更短,例如而不是将 6 个 DIVS 放在那里,只有一个具有通用的东西,比如以这个词开头(看看下面的 *?$("#dnn_ctr8192_ViewWebShop_TabContainer1_TabPanel*").click(changeColor);
    • 您可以为这些 div 中的每一个分配一个自定义 css 类(比如说“tabcontainer”)。然后你可以在 document.ready 函数中使用一行代码。 $('.tabcontainer').click(changeColor);
    【解决方案3】:

    将所有选择器(您正在触发 clcik 事件的选择器)放在一个数组中, 然后迭代该数组,并将单击事件绑定到所有选择器..这将使您的代码更短。 你可以通过这种方式让你的 resetColor() 更短一些。

    function resetColor(handler){
     $("#dnn_ctr8192_ViewWebShop_TabContainer1_"+handler+".ajax__tab_outer").css("background-color", "#edf2fb");
    }
    

    然后像这样将中间词传递给那个函数(只是一个例子)。

    resetColor(TabPanelVeiligheid_tab); 
    

    希望对你有所帮助!!

    【讨论】:

      【解决方案4】:

      我会离开 AjaxToolkit 并用 jQuery 替换所有东西。将自定义类添加到生成的控件并将事件绑定到该类。然后,您可以使用“this”关键字来处理已单击的元素。

      编辑:

      为所有标签容器分配一个类。

      class="my_class"

      然后在事件绑定中添加$('.my_class').live('click', myFunctionToChangeColours); 是否需要执行.live 或.bind 取决于您。在 myFunctionToChangeColours 之后,您将使用我之前提到的“this”来更改您单击的选项卡的颜色。

      【讨论】:

      • vikp,好的,假设我删除了 ajaxtookit,但这仍然是呈现的代码,当我将代码替换为“this.css("background-color", "#80FE80");"它不会改变颜色......我的问题是:我正在复制代码......它应该更短但是如何?
      • 你只需要一个函数来执行此操作,而不是在每个选项卡容器中执行此操作。
      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2015-09-16
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2016-12-20
      • 1970-01-01
      相关资源
      最近更新 更多