实例代码:
function hasClass( elements,cName ){
return !!elements.className.match( new RegExp( "(\\s|^)" + cName + "(\\s|$)") );
};
function addClass( elements,cName ){
if( !hasClass( elements,cName ) ){
elements.className += " " + cName;
};
};
function removeClass( elements,cName ){
if( has
在JavaScript中,操作DOM元素的CSS类(class)是常见的任务,比如动态地为元素添加或删除样式。在ES6之前,我们通常使用原生JS的方法来实现这些功能,而不是依赖于jQuery等库。这里我们将详细讲解如何使用原生JavaScript编写`hasClass`、`addClass`和`removeClass`这三个函数,用于检测、添加和移除元素的类。
`hasClass`函数是用来检查一个DOM元素是否已经包含了指定的类名。这个函数接受两个参数,第一个是元素对象,第二个是要检查的类名。函数内部使用`className`属性获取元素的所有类名,并通过正则表达式匹配来判断是否包含指定的类。返回值是一个布尔值,表示元素是否有该类:
```javascript
function hasClass(elements, cName) {
return !!elements.className.match(new RegExp("(\\s|^)" + cName + "(\\s|$)"));
}
```
在正则表达式 `(\\s|^)` 和 `(\\s|$)` 中,`\\s` 匹配任何空白字符,`^` 表示字符串的开始,`$` 表示字符串的结束。这样可以确保我们在类名的开始或结束处找到匹配项,或者在其他类名之间找到它。
接下来,`addClass`函数用于向元素添加类。同样,它接受元素对象和类名作为参数。如果元素不包含指定的类(通过`hasClass`函数检查),则将类名添加到`className`属性,用空格分隔:
```javascript
function addClass(elements, cName) {
if (!hasClass(elements, cName)) {
elements.className += " " + cName;
};
}
```
`removeClass`函数用于移除元素的类。它首先检查元素是否包含该类,然后使用`replace`方法和正则表达式替换掉类名。这里的正则表达式与`hasClass`函数中的相同,用于精确匹配类名并将其替换为空格:
```javascript
function removeClass(elements, cName) {
if (hasClass(elements, cName)) {
elements.className = elements.className.replace(new RegExp("(\\s|^)" + cName + "(\\s|$)"), " ");
};
}
```
这个`replace`方法只会替换掉第一个匹配项,因为正则表达式没有全局标志`g`。对于大多数情况,这已经足够了,因为一个元素的类名不应该重复。
总结来说,这些原生JavaScript函数提供了对DOM元素类名的基本操作,它们在不需要引入额外库的情况下,可以方便地在前端项目中使用。通过熟练掌握这些方法,开发者可以更加灵活地控制页面元素的样式和交互。在实际应用中,这些函数可以进一步优化,例如处理多个类名的情况,或者考虑兼容旧版浏览器。