2

これは私に3泊の間ストレスを与えています...なぜそれがIE9で動作するのか、IE8では動作しないのかわかりません。IE8で実行すると、このエラーが発生し続けます。

SCRIPT5007:プロパティ'src'の値を取得できません:オブジェクトがnullまたは未定義です

デバッグしようとすると、この行が原因になります->

        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 に答える