6

初期ロード時間を短縮するために、かなり簡単で、ロード後に実行する必要がある関数があります。

基本的に、このコードを使用して、クラス「prefImg」のすべての要素を取得し、それらを使用していくつかのことを行います。しかし、firebug でデバッグすると、var divsList が未定義であると表示されます。

function populatePrefsList()
    {
        var divsList = new Array();
        divsList = document.getElementsByClassName("prefImg");
        var x = divsList.length;
        var i = 0;
        for(i=0; i<divsList.length; i++) {
            var imgs = divsList[i].getElementsByTagName("img");
            var imgSRC = imgs[0].src;
            var alt = imgs[0].alt;
            var descs = divsList[i].getElementsByTagName("h4");
            var desc = descs[0].innerHTML;
            //var thisPref = new preference(imgSRC, alt, desc);
            //prefsList[i] = thisPref;
        }
    }

明らかに私はブレークポイントを持っていますvar x = divsList.length...

私はこれを理解できません。最初はページのヘッドにスクリプトがありましたが、まだ div をロードしていない可能性があると考えて、ボディの下部に移動しました。これで解決しませんでした。

私が持っていたvar divsList = document.getElementsByClassName("prefImg");

誰かが私が間違っている場所を教えてくれたら、私は感謝します. className を持つ約 50 の div がありますprefImg

乾杯

4

6 に答える 6

6

getElementsByClassName の代わりに querySelectorAll を使用できます。

変化するdivsList = document.getElementsByClassName("prefImg");

これにdivsList = document.querySelectorAll(".prefImg");

デモ - http://jsfiddle.net/ya3gU/

ところで、設定する前に配列 divsList を宣言する必要はありません。ただ行う:

var divsList = document.querySelectorAll(".prefImg");
于 2012-06-27T21:41:13.460 に答える
2

このコードを頭に書かないでください。これは、ボディがまだロードされていないことを意味します。あなたのボディタグの最後にそれを行うか、使用してください-

window.addEventListener("load", function() { // code here });

于 2013-02-15T23:09:12.183 に答える
0

古いブラウザ (IE6、IE7、IE8 など) はgetElementsByClassNameをサポートしていないため、undefined.

新しいブラウザーでは、戻り値は neverundefinedです。ほとんどは a ですHTMLCollection(ただし、W3C 仕様以降は a である必要がありますNodeList)。

https://developer.mozilla.org/en/DOM/document.getElementsByClassName

しかし、あなたの場合、本当の問題は Firebug のバグだと思います:

http://code.google.com/p/fbug/issues/detail?id=5336

これは修正され、パッチがコミットされ、Firebug 1.10a6の一部になります。

于 2012-06-27T23:18:46.030 に答える
0

ウィンドウオブジェクトのロードイベントにイベントハンドラーを使用して、ウィンドウのロードが完了したときにのみスクリプトを実行できます

 function populatePrefsList()
  {
    var divsList = new Array();
    divsList = document.getElementsByClassName("prefImg");
    var x = divsList.length;
    var i = 0;
    for(i=0; i<divsList.length; i++) {
        var imgs = divsList[i].getElementsByTagName("img");
        var imgSRC = imgs[0].src;
        var alt = imgs[0].alt;
        var descs = divsList[i].getElementsByTagName("h4");
        var desc = descs[0].innerHTML;
        //var thisPref = new preference(imgSRC, alt, desc);
        //prefsList[i] = thisPref;
    }
}


 window.onload = function(){
 populatePrefsList();
}
于 2012-06-27T21:53:28.943 に答える
-1

これはすべてのブラウザでサポートされているわけではありません...これをサポートしていないブラウザは、独自に実装する必要があります。

function getElementsByClassName(node,classname) {
    if (node.getElementsByClassName)
        return node.getElementsByClassName(classname);
    else {
        // custom
    }
}
于 2012-06-27T21:38:20.700 に答える