getElementsByTagName('img')。length记录为0

时间:2015-03-16 00:16:28

标签: javascript

我已阅读过多篇帖子,但仍然不明白为什么document.getElemenstsByTagName(' img'。)长度打印出来' 0'但是当您控制日志时,它会显示正确的长度。

为了进一步解释我的问题,我的部分HTML看起来像这样

<div id="parent">
    <div id="slider">
    </div>
</div>

现在我动态地将元素作为子元素添加到#slider元素中。

在我的javascript中,我有一个对象

var manualSlide = {
 imageLength: document.getElementsByTagName('img').length,
//other properties 
};

为什么财产&#39; imageLength&#39;被分配&#39; 0&#39;而不是实际的长度?

编辑:

这是我的整个脚本

<script>
    $.getJSON('data.json',function(data){
        $.each(data.images, function(key){
            setImages(data.images[key]);
        });
    });

    function setImages(obj){
        var imgTag = '';
        imgTag += "<img src='" + obj.Url + "' style='width:800px;height:400px' alt ='"+ obj.Title +"' name='pics'/>";
        $('#slider').append(imgTag);
    }

    $(document).ready(function(){
        var slide = getManualSlide();

        document.getElementsByClassName('left').onclick = function(){
            slide.previousImg();
        };

        document.getElementsByClassName('right')[0].onclick = function(){
            slide.nextImg();
        };

        function getManualSlide(){

            var manualSlide = {
                imageNum : 1,
                imageLength: document.getElementsByTagName('img').length,
                image: document.getElementsByTagName('img'),
                previousImg: function(){
                    if(this.imageNum > 1){
                        this.imageNum --;
                    }
                    else{
                        this.imageNum = this.imageLength;
                    }

                    document.pics.src = this.image[this.imageLength - 1];
                },
                nextImg: function(){
                    if(this.imageNum > this.imageNum){
                        this.imageNum ++;
                    }
                    else{
                        this.imageNum = 1;
                    }

                    console.log(document.getElementsByTagName('img').length);
                    console.log(this.imageLength);
                    document.pics.src = this.image[this.imageLength - 1];
                }
            };

            return manualSlide;

        }

    });
</script>

2 个答案:

答案 0 :(得分:2)

所有关于代码执行的地点和时间都是如此。

您必须确保在解析图像标记(添加到DOM树)后执行代码。 为此,您可以将代码放在正文中的img-tags后面,或者等待文档加载:

<script>
  document.addEventListener("DOMContentLoaded", function(event) {
     imageLength = document.getElementsByTagName('img').length;
     console.log(imageLength);
  });
</script>

您可以详细了解此活动here

如果您使用的是jQuery,也可以使用

$(document).ready(function(){ /* your code goes here */ });

完全相同。

答案 1 :(得分:0)

因为当文档中没有img标记时创建了对象。对象数据不会随文档一起更新。如果您想要这种行为,您应该使用事件。

而是创建一个函数来返回更新的对象。见下文:

function getManualSlide()
{
    var imgLen = document.getElementsByTagName('img').length;
    var manualSlide = {
     imageLength: imgLen
    };    

    return manualSlide;
}

http://jsfiddle.net/2akca0dg/2/