Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
HTML集合和;Javascript中的数组_Javascript_Arrays_Dom - Fatal编程技术网

HTML集合和;Javascript中的数组

HTML集合和;Javascript中的数组,javascript,arrays,dom,Javascript,Arrays,Dom,下面的代码只生成一个错误。我希望检索每个div的REL属性值。不知道,为什么我不能做 我在控制台中看到的错误:未捕获类型错误:对象没有方法“getAttribute” <div class="boxes"> <div rel="first" class="box">Box 1</div> <div rel="second" class="box">Box 2</div> <d

下面的代码只生成一个错误。我希望检索每个div的REL属性值。不知道,为什么我不能做

我在控制台中看到的错误:未捕获类型错误:对象没有方法“getAttribute”

    <div class="boxes">
        <div rel="first" class="box">Box 1</div>
        <div rel="second" class="box">Box 2</div>
        <div rel="third" class="box">Box 3</div>
    </div>
    <script>
        $(function(){
            var i = 0;
            var allDivs = document.getElementsByClassName('box');
            var arr = [];
            arr.push(allDivs);
            setInterval(function(){
                console.log(arr[i].getAttribute('rel'));
                i++;
            }, 1000);
        });
    </script>

方框1
方框2
方框3
$(函数(){
var i=0;
var allDivs=document.getElementsByClassName('box');
var-arr=[];
arr.push(所有divs);
setInterval(函数(){
log(arr[i].getAttribute('rel');
i++;
}, 1000);
});
您正在将一个数组(确切地说是节点列表)推入一个数组,并尝试从节点列表对象而不是单个元素获取属性。试试这个:

<div class="boxes">
    <div rel="first" class="box">Box 1</div>
    <div rel="second" class="box">Box 2</div>
    <div rel="third" class="box">Box 3</div>
</div>
<script>
    $(function(){
        var i = 0;
        var allDivs = document.getElementsByClassName('box');
        var arr = [];
        arr.push(allDivs);
        setInterval(function(){
            console.log(arr[0][i].getAttribute('rel'));
            i++;
        }, 1000);
    });
</script>

这将把allDivs集合中的所有单个元素附加到
arr
上。然后,您可以像以前一样访问
arr
arr[i].getAttribute('rel')
(arr的内容将是
[,];

用以下内容替换脚本:

     $(function(){
        var i = 0;
        var allDivs = document.getElementsByClassName('box');
        //allDivs itself is an array and there is no need to push the result to an array.

        setInterval(function(){
            console.log(allDivs[i].getAttribute('rel'));
            i++;
        }, 1000);

     });

.getElementsByCassName
不返回一个。相反,它返回一个。谢谢你的区别。重要的是要知道getElementsByClassName的返回值不是javascript数组,而是一个称为节点列表的活动集合。我更新了我的答案,使之更清楚。
arr.push.apply(arr, allDivs);
     $(function(){
        var i = 0;
        var allDivs = document.getElementsByClassName('box');
        //allDivs itself is an array and there is no need to push the result to an array.

        setInterval(function(){
            console.log(allDivs[i].getAttribute('rel'));
            i++;
        }, 1000);

     });