0

私はこのjsコードを持っています:

var id = document.getElementById("myDiv").getAttribute("data-id");  

et="Your Message Here";
el="http://x2.xclicks.net/sc/out.php?s="+id+""
sl=new Array(); 
sn=new Array();
a="</a>"; af="<a target='_blank'";


function dw(n) {document.write(n,"\n");}
function showLink(n,s,b){
    if(!s) {s='anc'} 
    if(!b) {b=''} 
    else   {b="&b="+b}
    ast = af+" class='"+s+"' href='"+el; 
    n   = n-1; 
    if(sl[n]&&sl[n]!="") {
        dw(ast+"&o="+sl[n]+b+"'>"+sn[n]+a)
    } else {
        dw(ast+b+"'>"+et+a)
    }
}

次のように header.php にロードします。

<script type="text/javascript" src="<? bloginfo('template_url'); ?>/js/trf.js"></script>

問題は、これは正しいですが、次のことです。

var id = document.getElementById("myDiv").getAttribute("data-id");

次のエラーが表示されます。

getElementById() が null であるか、オブジェクトではありません

Ady アイデア なぜ?

ドキュメントの準備が整っていることを宣言する必要がありますか?

4

4 に答える 4

2

ドキュメントの準備が整っていることを宣言する必要がありますか?

はい、正確に。ドキュメントの準備が整う (つまり、すべてのタグが DOM 要素に解析される) 前に、ID で要素を取得することはできません。これは、すでに解析されている script タグの上の要素に対してのみ機能します。スクリプトのインクルードを<head>終了前から移動する</body>と役立ちます。または、さまざまなDOMContentLoadedまたはonloadイベントのいずれかを使用する必要がありますが、残念ながらクロスブラウザーはサポートされていません。適切なスニペットを検索するか、ライブラリを使用することをお勧めします。

于 2012-08-02T14:36:49.003 に答える
1

でラップしてみ$(document).readyます。おそらく、DOM の準備が整う前にアクセスしようとしているだけです。

于 2012-08-02T14:39:43.613 に答える
1

そのスクリプトをドキュメントにロードしていると仮定すると<head>、要素がまだ DOM にロードされていないときに、ID で要素を取得しようとしています。

onDOMContentLoadedID でその要素にアクセスするには、( 、window.onload、またはレンダリングが完了するまで延期するその他の方法を使用して)ドキュメントの準備が整うまで待つ必要があります。

于 2012-08-02T14:36:33.213 に答える
0

ヘッダーにスクリプトをロードしています。つまり、スクリプトはドキュメントの残りの部分よりも先にロードされています。スクリプト内で document.getElementById をすぐに呼び出します。ドキュメントの残りの部分の読み込みが完了していないため、目的の要素がまだ存在しない可能性が非常に高くなります。

ドキュメントが完全に読み込まれるまで、スクリプトのその部分の実行を遅らせる必要があります。スクリプトのその部分を関数でラップし、body.onload イベント中に呼び出します。

例として (同じ結果を達成する他の方法があります):

window.document.onload = function(e){ 
    var id = document.getElementById("myDiv").getAttribute("data-id");  

    // Now you have the id and can do whatever you want with it.
}
于 2012-08-02T14:37:51.930 に答える