JavaScript通过class获取元素

2025-12-02 02:13:26

1、在javascript中获取元素的class应该使用className来获取,实际应用中最好封装一个方法方便我们以后通过class来获取元素。

HTML:,

<div class="box">第一个</div>

<div class="box">第二个</div>

<div class="box">第三个</div>

我们可以判断当元素的className为box的时候就返回获取的元素。但是如果包含多个class时就要注意javascript的写法了。

1、方法代码如下:

function getByClass(sClass){

    var aResult=[];

    var aEle=document.getElementsByTagName('*');

    for(var i=0;i<aEle.length;i++){

       /*当className相等时添加到数组中*/

       if(aEle[i].className==sClass){

            aResult.push(aEle[i]);

        }

    }

    return aResult;

};

2、调用方法(实际使用):

window.onload=function (){

    var aBox=getByClass("box");

    for(var i=0;i<aBox.length;i++){

       alert(aBox[i].innerHTML);

    }

};

3、方法一分析:

此方法只适用于只有一个class的元素,如果包含多个class,

HTML:

<div class="box aa bb">第一个</div>

<div class="box dd">第二个</div>

<div class="box">第三个</div>

那么第一个和第二个元素就无法获取了。

原因:

判断条件是if(aEle[i].className==sClass),只有当className与要选的class完全相等时才获取。

1、解决包含多个class的元素获取。

分析:

如<div class="box aa bb"></div>,每个class:box  aa  bb 都相当于一个单词,配合正则表达式将需要获取的class当做验证模式,寻找包含匹配的字符串class就行了。

2、方法代码如下:

function getByClass(sClass){

    var aResult=[];

    var aEle=document.getElementsByTagName('*');

    /*正则模式*/

    var re=new RegExp("\\b" + sClass + "\\b","g");

    for(var i=0;i<aEle.length;i++){

        /*字符串search方法判断是否存在匹配*/

        if(aEle[i].className.search(re) != -1){

            aResult.push(aEle[i]);

        }

    }

    return aResult;

};

3、调用方法(实际使用):

window.onload=function (){

    var aBox=getByClass("box");

    for(var i=0;i<aBox.length;i++){

       alert(aBox[i].innerHTML);

    }

};

此方法就可以解决包含多个class的元素获取了,是不是有点小激动?如果你对正则表达式不熟悉,呵呵.....且看下面的方法。

1、分析:

如<div class="box aa bb"></div>,我们可以将class通过空格拆分成数组,如果要获取的class满足数组中的一个元素,那么就获得此元素。

2、方法代码如下:

function getByClass(sClass){

    var aResult=[];

    var aEle=document.getElementsByTagName('*');

   

    for(var i=0;i<aEle.length;i++){

        /*将每个className拆分*/

        var arr=aEle[i].className.split(/\s+/);

        for(var j=0;j<arr.length;j++){

            /*判断拆分后的数组中有没有满足的class*/

            if(arr[j]==sClass){

                aResult.push(aEle[i]);

            }

        }

    }

    return aResult;

};

3、调用方法同上,此方法包含两个循环,外面为元素循环,里面为className拆分后的数组循环,简单容易理解。

1、上面的方法只是都传递一个参数:sClass,获取的是HTML中所有的标签

var aEle=document.getElementsByTagName('*');资源大大浪费。我们来做一下优化,只需要传递要获取class的父标签元素就行了,

优化代码:

function getByClass(oParent,sClass){

    var aResult=[];

    var aEle=oParent.getElementsByTagName('*');

    ...

    ...

    ...

}

后面的内容上面的几种方法都可以,这样是不是优化了许多呢!

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢