Удалить класс CSS из HTML-элемента в коде, лежащем в основе файла

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

У меня есть следующее в моем интерфейсе / веб-форме:

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

Теперь в моем коде есть условие, при котором, если определенная ситуация верна, мне нужно удалить forceHeight класс из этого элемента управления. Я знаю, что в C # вы можете использовать:

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

Я не совсем уверен, как вы это делаете, используя VB? Intellisense не предлагает мне эту опцию?

У кого-нибудь есть идеи?

Комментарии:

1. Ответ от @Obsidian действительно должен быть принятым ответом здесь. Принятый в настоящее время ответ просто удаляет все классы.

Ответ №1:

Как удалить ОДИН класс CSS из элемента управления с помощью .NET

Если элемент управления имеет несколько классов, вы можете удалить один из этих классов, отредактировав строку class. Оба этих метода требуют присвоения идентификатора HTML-элементу, чтобы вы могли настроить на него таргетинг в коде, лежащем в основе.

 <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 для удаления завершающего пробела.


Как удалить ВСЕ классы CSS из элемента управления с помощью .NET

VB.NET

 mydiv.Attributes.Remove("class")
  

C#

 mydiv.Attributes.Remove("class");
  

Комментарии:

1. Я в замешательстве, почему OP принял ответ, который принят. Он, кажется, спрашивал, как удалить a single css class и приведенные выше ответы дают решение о том, как удалить all css classes . Кроме того, то, что он попробовал, было почти тем, что он хотел сделать: mydiv.CssClass.Replace("forceHeight", ""); . Но многие люди забывают, что Replace это метод, который возвращает String объект, а не процедуру, поэтому вы должны преобразовать его в переменную.

2. Кроме того, могу ли я предложить вам Trim использовать данную строку следующим образом: Me.mydiv.CssClass.Replace("forceHeight", "").Trim() ? Это делает html более приятным для чтения, когда в class атрибуте нет ненужных пробелов.

3. @BishopBarber Вы правы, я столкнулся с этим вопросом, но в итоге мне пришлось решать его самому. Я добавил свои выводы, чтобы помочь другим, кто пришел сюда. P.s Trim добавил «чистота — это счастье =)`

4. @Skillzore В div действительно есть class и на этот класс можно ссылаться из исходного кода путем вызова, CssClass при runat="server" наличии тега. Кроме того, использование пробела в вызове не сработало бы, потому что тогда класс был бы удален, только если бы пробел существовал, чего в некоторых случаях нет.

5. Замена подстроки может изменить другие классы (например, forceHeight2). Для уверенности класс можно разбить на массив и отфильтровать: mydiv.Attributes["class"] = String.Join(" ", mydiv.Attributes["class"].Split(' ').Where(x => x != "forceHeight")); Для фильтрации по нескольким классам, содержащимся в HashSet, можно использовать: mydiv.Attributes["class"] = String.Join(" ", mydiv.Attributes["class"].Split(' ').Where(x => !(new HashSet<string> { "one", "two" }).Contains(x)));

Ответ №2:

Это приведет к удалению всех классов CSS из div с ID="mydiv"

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

Ответ №3:

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

намного лучше, поскольку он не оставит заглушки. Это приведет к созданию более чистого HTML-тега.

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

Если вы используете это,

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

вместо этого он создаст это

<div id="mydiv" class=""></div> или <div id="mydiv" class></div>

Ответ №4:

Я считаю, что лучше использовать REGEX replace, поскольку заменяющий класс может существовать как частичное имя в других классах, что приведет к их нарушению. Итак, я использую следующий метод расширения:

 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, я не myDiv.CssClass в IntelliSense деле.

Ответ №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, ""));
    }
  

Комментарии:

1. Этот код действительно может ответить на вопрос, но без объяснения неясно, как именно, и чем он отличается от других ответов. Не могли бы вы, пожалуйста, добавить несколько комментариев, чтобы сделать ваш ответ более полезным для будущих читателей?