2

这已经让我紧张了 3 个晚上......我不知道为什么它在 IE9 中有效,但在 IE8 中无效。当我在 IE8 上运行它时,我不断收到此错误:

SCRIPT5007:无法获取属性“src”的值:对象为空或未定义

当我尝试调试时,我得到这条线是原因->

        var map_locations = [], container = document.getElementById('renting-map-js'), 
        c = container.children, l = c.length, i, obj, p, m, j;

        //loop through all child nodes
        for ( i = 0; i < l; i++) {
            obj = {};

            //highlights this line
            obj.img = c[i].getElementsByTagName('img')[0].src; 

            p = c[i].getElementsByTagName('p');
            m = p.length;
            for ( j = 0; j < m; j++)
                obj[p[j].className] = p[j].firstChild.nodeValue;
            map_locations[i] = obj;
            console.log(obj);
        }

​</p>

这是小提琴http://jsfiddle.net/EgzKv/

4

2 回答 2

3

在 IE6-8 中,.children还返回注释节点。由于评论节点不能有子节点,它们也不能包含具有 src 属性的图像,从而导致您的错误。

jQuery 可以解决这个问题:

var map_locations = [],
    container = document.getElementById('renting-map-js'),
    c = $(container).children().get(),
    l = c.length,
    i, obj, p, m, j;

//loop through all child nodes
for (i = 0; i < l; i++) {
    obj = {};
    obj.img = c[i].getElementsByTagName('img')[0].src;
    p = c[i].getElementsByTagName('p');
    m = p.length;
    for (j = 0; j < m; j++)
    obj[p[j].className] = p[j].firstChild.nodeValue;
    map_locations[i] = obj;
    console.log(obj);
}​
于 2012-12-04T20:38:37.300 回答
1

是的,这个问题是因为评论节点,你只需要忽略它们。如果您不使用 jQuery,最简单的解决方案 - 只需添加对 nodeType 的检查,然后忽略所有而不是 1(元素节点):

var map_locations = [], container = document.getElementById('renting-map-js'), 
c = container.children, l = c.length, i, obj, p, m, j;

//loop through all child nodes
for ( i = 0; i < l; i++) {

    // Ignore non-element nodes.
    if(c[i].nodeType != 1)
        continue;

    obj = {};

    //highlights this line
    obj.img = c[i].getElementsByTagName('img')[0].src; 

    p = c[i].getElementsByTagName('p');
    m = p.length;
    for ( j = 0; j < m; j++)
        obj[p[j].className] = p[j].firstChild.nodeValue;
    map_locations[i] = obj;
    console.log(obj);
}

有关 nodeType 属性的更多信息 - http://help.dottoro.com/ljkadgoo.php

于 2012-12-04T20:57:43.490 回答