首页 > 关于正则的一个困惑

关于正则的一个困惑

function getclass(parent,classname){
    var tags=parent.getElementsByTagName('*');
    var temp=[];
    for(var i=0;i<tags.length;i++){
        if(tags[i].className.match(new RegExp("\\s+|^"+classname+'$|\\s+'))){
            temp.push(tags[i]);
        }
    }
    return temp;
}


为什么这个函数会获取parent下所有的节点?正则哪里写错了吗?

如果你只是想找 class,可以用 classList,比如

if (tags[i].classList.contains(classname)) {
    temp.push(tags[i])
}

另外,你取 temp 那里可以用 filter 简化

var temp = [].filter.call(tags, function(t) {
    return t.classList.contains(classname);
});

改过之后完整的代码

function getByClass(parent, classname) {
    var tags = parent.getElementsByTagName('*');
    return [].filter.call(tags, function(t) {
        return t.classList.contains(classname);
    });
}

但其实有更简单的办法可以处理

function getByClass(parent, classname) {
    return parent.querySelectorAll("." + classname);
}

这个就是获取parent下所有节点啊,你的实际想法是什么?‘*’是全部匹配


你是想要取得给出classname的child节点吧?

为何要使用正则?,className已经是一个字符串了,直接判断indexOf不就可以了?

【热门文章】
【热门文章】