Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查元素是否有类的最佳方法是什么? 问题_Javascript_Dom - Fatal编程技术网

Javascript 检查元素是否有类的最佳方法是什么? 问题

Javascript 检查元素是否有类的最佳方法是什么? 问题,javascript,dom,Javascript,Dom,如果元素有多个类,那么它将与常规属性值检查不匹配,因此我正在寻找最好的方法来检查对象在元素的className属性中是否有特定的类 例子 那么,最好的方法是什么呢 请只使用纯javascript如果您要求使用纯javascript,那么jQuery就是这样实现的: hasClass: function( selector ) { var className = " " + selector + " ", i = 0, l =

如果元素有多个类,那么它将与常规属性值检查不匹配,因此我正在寻找最好的方法来检查对象在元素的className属性中是否有特定的类

例子 那么,最好的方法是什么呢


请只使用纯javascript

如果您要求使用纯javascript,那么jQuery就是这样实现的:

    hasClass: function( selector ) {
        var className = " " + selector + " ",
            i = 0,
            l = this.length;
        for ( ; i < l; i++ ) {
            if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
                return true;
            }
        }
        return false;
    },
hasClass:函数(选择器){
var className=”“+选择器+“”,
i=0,
l=此长度;
对于(;i-1){
返回true;
}
}
返回false;
},

rclass
[\n\t\r]
的正则表达式,以确保划分类名的替代方法不成问题<代码>这将是jQuery对对象的引用,从某种意义上说,它使代码比要求的更复杂,但在不知道细节的情况下,它应该是有意义的。

在现代浏览器中,您可以使用:

在不实现
classList
但公开DOM原型的浏览器中,可以使用链接中显示的垫片


否则,您可以使用相同的shim代码来创建泛型函数,而无需操作原型。

首先,使用“”字符拆分类名,然后检查要查找的类的索引

function hasClass(element, clazz) {
    return element.className.split(" ").indexOf(clazz) > -1;
}
这应该适合您:

var a=[];
函数getElementsByClassName(类名,节点){
如果(!node)node=document.getElementsByTagName(“body”)[0];
var re=new RegExp('\\b'+classname+'\\b');
var els=node.getElementsByTagName(“*”);
对于(var i=0,j=els.length;i2018年使用ES6

const hasClass = (el, className) => el.classList.contains(className);
如何使用

hasClass(document.querySelector('div.active'), 'active'); // true

您可以使用一些正则表达式作为完整的类名。对于正则表达式,您可以引用的这个可能的副本-,请在您提出新问题之前使用搜索。您是否有机会从jQuery复制了它?这个
指的是什么?在哪里定义了
rclass
呢?我在评论中非常清楚地提到,是的,它来自from jQuery。你提出了一个关于rclass的好观点,我没有注意到,我会更新答案,但在IE8及以下版本中,答案不会立即生效(
indexOf
不支持数组)。非常确定jQuery的版本首先规范化了
.className
值中的空格分隔符。如果使用制表符或其他空格字符分隔类,则此操作可能会失败。
function hasClass(element, clazz) {
    return element.className.split(" ").indexOf(clazz) > -1;
}
var a = [];
function getElementsByClassName(classname, node)  {
    if(!node) node = document.getElementsByTagName("body")[0];

    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0, j=els.length; i<j; i++)
        if(re.test(els[i].className)) a.push(els[i]);
        return a;
}

getElementsByClassName('wrapper');
for (var i=0; i< a.length; i++) {
    console.log(a[i].className);
}
const hasClass = (el, className) => el.classList.contains(className);
hasClass(document.querySelector('div.active'), 'active'); // true