首頁  >  問答  >  主體

javascript - 拥有多个值的class的值怎么获取。

getElementsByClassName并不支持低版本的IE,所有找了个兼容的写法,
但是这个函数并不支持在class拥有多个值的情况下获取。
请问怎么可以实现。


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <script>
        function getByClass(oParent, sClass){
            var aEle=oParent.getElementsByTagName('*');
            var aResult=[];

            for(var i=0;i<aEle.length;i++){
                if(aEle[i].className==sClass){
                    aResult.push(aEle[i]);
                }
            }
            return aResult;
        }
    </script>
</head>
<body>
    <p id="d3">
        <span class="s3"></span>
        <span class="s3"></span>
        <span class="s3 s33"></span>
    </p>
    <script>
        var oD3=document.getElementById('d3');
        var aS3=getByClass(oD3,'s3');
        alert(aS3.length); //这种情况下aS3.length的值只有2。
    </script>
</body>
</html>
大家讲道理大家讲道理2771 天前318

全部回覆(2)我來回復

  • 高洛峰

    高洛峰2017-04-11 12:58:46

    想想jquery不就实现了吗,那么这时就可以看源码了,改一下你的判断条件

    function getByClass(oParent, sClass){
            var aEle=oParent.getElementsByTagName('*');
            var aResult=[];
            var whitespace = "[\\x20\\t\\r\\n\\f]"
            var rex=new RegExp( "(^|" + whitespace + ")" + sClass + "(" + whitespace + "|$)" )
            for(var i=0;i<aEle.length;i++){
                if(rex.test(aEle[i].className)){
                    aResult.push(aEle[i]);
                }
            }
            return aResult;
        }

    回覆
    0
  • 怪我咯

    怪我咯2017-04-11 12:58:46

    aEle[2].className="s3 s33" 这个地方会把第三个的 "s3 s33" 同时找出来,所以aEle[2].className!=sClass 你的aResult数组里只有两项

    回覆
    0
  • 取消回覆