Change CSS classes from code

后端 未结 7 911
误落风尘
误落风尘 2020-12-03 06:17

It\'s easy to set CssClass in the code-behind, but this runs the risk of overwriting existing classes.

I need to set certain elements to ReadOnly

7条回答
  •  囚心锁ツ
    2020-12-03 06:42

    Pure .NET 2.0 (No extensions! No LINQ! No RegEx! No unnecessary WebControl class!). These methods are quite general to be used not for CSS classes only.

    public static string AddCssClass(string classContainer, string className)
        {
            if (string.IsNullOrEmpty(classContainer)) return className ?? string.Empty;
            if (string.IsNullOrEmpty(className)) return classContainer;
    
            var classNames = classContainer.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            if (Array.Exists(classNames, delegate(string s) { return s.Equals(className); })) return classContainer;
    
            return classContainer + " " + className;
        }
    
        public static string RemoveCssClass(string classContainer, string className)
        {
            if (string.IsNullOrEmpty(classContainer)) return className ?? string.Empty;
            if (string.IsNullOrEmpty(className)) return classContainer;
    
            var classNames = classContainer.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            int index = Array.FindIndex(classNames, delegate(string s) { return s.Equals(className); });
            if (index >= 0)
            {
                return string.Join(" ", classNames, 0, index) +
                    (   index + 1 < classNames.Length ?
                        " " + string.Join(" ", classNames, index + 1, classNames.Length - index - 1)
                        :
                        string.Empty    );
            }
    
            return classContainer;
        }
    
        public static string ToggleCssClass(string classContainer, string className)
        {
            if (string.IsNullOrEmpty(classContainer)) return className ?? string.Empty;
            if (string.IsNullOrEmpty(className)) return classContainer;
    
            var classNames = classContainer.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
    
            if (Array.Exists(classNames, delegate(string s) { return s.Equals(className); })) return RemoveCssClass(classContainer, className);
    
            return classContainer + " " + className;
        }
    

提交回复
热议问题