以编程方式从HTML元素中删除特定的类名称

时间:2012-05-15 12:24:54

标签: c# asp.net .net

在C#ASP.NET中,我使用:

<input>添加了一个类
myInput.Attributes.Add("class","myClass");

在某些时候我想删除添加的类(不是所有类)。是否存在以下等同词:

myInput.Attributes.Remove("class","myClass");

.Remove()似乎只接受一个键(没有对值)。谢谢!

2 个答案:

答案 0 :(得分:10)

没有内置任何东西来管理属性中的多个值。

您必须解析列表,删除类名并更新属性。

像(未经测试)的东西:

var classes = myInput.Attributes["class"].Split(' ');

var updated = classes.Where(x => x != "classtoremove").ToArray();

myInput.Attributes["class"] = string.Join(" ", updated);

答案 1 :(得分:2)

我受到了Odeds帖子的启发,并创建了这两种扩展方法供你详细说明;

public static void AddCssClass(this WebControl control, params string[] args)
{
    List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList<string>();
    List<string> classesToAdd = args.Where(x => !classes.Contains(x)).ToList<string>();
    classes.AddRange(classesToAdd);
    control.CssClass = String.Join(" ", classes);
}
public static void RemoveCssClass(this WebControl control, params string[] args)
{
    List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList<string>();
    classes = classes.Where(x => !args.Contains(x)).ToList<string>();
    control.CssClass = String.Join(" ", classes);
}

这些方法仅用于添加或删除WebControls中的CSS类(来自Button s,Label s,Panel等等所有继承),如{ {1}}或myButton.AddCssClass("class1", "class2");

这可能会有点开销,但管理CssClass属性也可能有点麻烦,因为你被迫自己处理空白。

例如,你有多少次看过这个?

myButton.RemoveCssClass("class2");

请随意改进方法! :)