【问题标题】:Remove a CSS class from HTML element in the code behind file从代码隐藏文件中的 HTML 元素中删除 CSS 类
【发布时间】:2011-05-03 14:04:45
【问题描述】:

我的界面/网络表单上有以下内容:

<div id="mydiv" class="forceHeight" runat="server" />

现在我的代码中有一个条件,如果某种情况为真,我需要从此控件中删除 forceHeight 类。我知道在 C# 中你可以使用:

mydiv.CssClass.Replace("forceHeight", ""); 

我不太确定您是如何使用 VB 做到这一点的? Intellisense 不提供此选项?

有什么想法吗?

【问题讨论】:

  • @Obsidian 的答案应该是这里公认的答案。当前接受的答案只是删除所有类。

标签: asp.net vb.net


【解决方案1】:

如何使用 .NET 从控件中删除一个 CSS 类

如果一个控件有多个类,您可以通过编辑类字符串来删除这些类中的一个。这两种方法都需要为 HTML 元素分配一个 ID,以便您可以在后面的代码中定位它。

<asp:Panel ID="mydiv" CssClass="forceHeight class2 class3" runat="server" />

VB.NET

mydiv.CssClass = mydiv.CssClass.Replace("forceHeight", "").Trim()

C#

mydiv.CssClass = mydiv.CssClass.Replace("forceHeight", "").Trim();

或使用html通用控件

<div id="mydiv" class="forceHeight class2 class3" runat="server" />

VB.NET

mydiv.Attributes("class") = mydiv.Attributes("class").Replace("forceHeight", "").Trim()

C#

mydiv.Attributes["class"] = mydiv.Attributes["class"].Replace("forceHeight", "").Trim();

可选的Trim 删除尾随空格。


如何使用 .NET 从控件中删除所有 CSS 类

VB.NET

mydiv.Attributes.Remove("class")

C#

mydiv.Attributes.Remove("class");

【讨论】:

  • 我很困惑为什么 OP 接受了被接受的答案。他似乎在问如何删除a single css class,上面的答案给出了如何删除all css classes的解决方案。而且,他尝试的几乎就是他想做的:mydiv.CssClass.Replace("forceHeight", ""); 。但是很多人忘记了Replace是一个返回String对象的方法,而不是一个过程,因此你必须将它影响到一个变量。
  • 另外,我可以建议您Trim 给定的字符串,如下所示:Me.mydiv.CssClass.Replace("forceHeight", "").Trim()?当class 属性中没有不必要的空格时,它使 html 更易于阅读。
  • @BishopBarber 你是对的,我遇到了这个问题,但最终不得不自己解决。我添加了我的发现来帮助其他来到这里的人。 P.s Trim 添加了'清洁就是幸福=)`
  • @Skillzore 一个 div 确实有一个 class,如果存在 runat="server" 标签,则可以通过调用 CssClass 从后面的代码中引用此类。此外,在调用中使用空格是行不通的,因为只有当空格存在时才会删除该类,而在某些情况下它不存在。
  • 替换子字符串可能会修改其他类(例如 forceHeight2)。可以肯定的是,可以将类拆分为数组并过滤:mydiv.Attributes["class"] = String.Join(" ", mydiv.Attributes["class"].Split(' ').Where(x =&gt; x != "forceHeight")); 要过滤 HashSet 包含的多个类,可以使用:mydiv.Attributes["class"] = String.Join(" ", mydiv.Attributes["class"].Split(' ').Where(x =&gt; !(new HashSet&lt;string&gt; { "one", "two" }).Contains(x)));
【解决方案2】:

这将从带有ID="mydiv"的div中删除所有CSS类

Me.mydiv.Attributes("class") = ""

【讨论】:

    【解决方案3】:
    Me.mydiv.Attributes.Remove("class")
    

    更好,因为它不会留下存根。它会产生一个更干净的 HTML 标签。

    <div id="mydiv"></div>
    

    如果你使用这个,

    Me.mydiv.Attributes("class") = ""
    

    它会产生这个

    &lt;div id="mydiv" class=""&gt;&lt;/div&gt; 或 &lt;div id="mydiv" class&gt;&lt;/div&gt;

    【讨论】:

      【解决方案4】:

      我发现使用 REGEX 替换更好,因为替换类可能作为部分名称存在于其他类中,这会破坏它们。所以我使用了以下扩展方法:

      public static void RemoveClass(this WebControl control, string classToRemove)
      {
          if (control == null)
              return;
      
          control.CssClass = Regex.Replace(control.CssClass, @"(^|\s)" + classToRemove + @"($|\s)", " ");
      }
      

      【讨论】:

        【解决方案5】:
        mydiv.Attributes["class"] = mydiv.Attributes["class"].ToString().Replace("ClassName","")
        

        【讨论】:

          【解决方案6】:
          mydiv.Attributes("class") = mydiv.Attributes("class").Replace("forceHeight", "")
          

          其他答案对我不起作用。就像 OP 说的那样,我在IntelliSense 中没有得到myDiv.CssClass。

          【讨论】:

            【解决方案7】:
            public static void appendCssClass(HtmlGenericControl htmlGenericControl, string cssClassName)
                {
                    htmlGenericControl.Attributes.Add("class", 
                        htmlGenericControl.Attributes["class"].ToString() + " " + cssClassName);
                }
            
                public static void removeCssClass(HtmlGenericControl htmlGenericControl, string cssClassName)
                {
                    htmlGenericControl.Attributes.Add("class",
                                htmlGenericControl.Attributes["class"].Replace(cssClassName, ""));
                }
            

            【讨论】:

            • 这段代码确实可以回答这个问题,但如果没有解释,不清楚它是如何准确的,以及它与其他答案的不同之处。您能否添加一些 cmets 以使您的答案对未来的读者更有用?
            猜你喜欢
            • 2014-05-21
            • 1970-01-01
            • 2020-05-21
            • 1970-01-01
            • 2011-03-25
            • 2015-04-28
            • 1970-01-01
            • 2015-04-29
            • 2010-09-16
            相关资源
            最近更新 更多