0

このことは私を怒らせています...ページ内のすべてのリンクタグ()をチェックし、それらのリンクのうちの2つが特定のhref属性に少なくとも対応しているかどうかをチェックする単純なjsスクリプトがあります。スクリプトをインラインスクリプトとしてメインページに配置すると、うまく機能します。同じページの外部 .js スクリプト内に配置すると、要素が見つかりません。内部ドキュメントのみをスキャンし、親ドキュメントはスキャンしない場合と同様です。スクリプトはこれです

            var as,i,islink,l1,l2;
        l1 = false
        l2 = false
        as=document.getElementsByTagName('a');
        for(i=0;i<as.length;i++)
        {
            islink=as[i].href;
alert(islink);

            if(islink == 'http://www.linktocheck.com/')
            {
                if(!as[i].getAttribute('rel')) {l1 = true;}
            }
            if(islink == 'http://www.linktocheck.com/somedir/somepage.asp')
            {
                if(!as[i].getAttribute('rel')) {l2 = true;}
            }
        }
        if(!l1 || !l2) {alert('links not found in the page');}

alert(islink); を入れました。デバッグ目的で、リンク要素がページで見つかったかどうかを確認します。呼び出しページの HTML は次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1"><title>page a</title>
<meta name="robots" content="noarchive" />
<meta content="text/html; charset=iso-8859-1" http-equiv="content-type" /></head>
<body>
<script src="externaljstochecklinks.js?PARAMETER=somevalue" id="uniqueid" type="text/javascript"></script><div style="margin-top: 6px;margin-bottom: 4px;text-align: center;"><a href="http://www.linktocheck.com/somedir/somepage.asp" title="" target="_blank">[...]</a>&nbsp;&nbsp;&nbsp;<a href="http://www.linktocheck.com/" title="" target="_blank"><img src="http://www.linktocheck.com/skins/some/images/some.gif" alt="" style="border: none;vertical-align: middle;" /></a></div>

リンク チェック スクリプトをインラインで配置すると要素が検出されるのに、外部として配置すると検出されないのはなぜですか?

4

2 に答える 2

2

DOM 要素を検索するクエリを実行するには、DOM の読み込みが完了するまで待つ必要があります。

スクリプトは<body>セクションの先頭にあるように見えます。これは、DOM が解析されて読み込まれる前に実行されることを意味します。したがって、検索するためにロードされたものはまだありません。

最も簡単な修正は、<script>タグをタグの直前のボディの最後に移動すること</body>です。また、イベント リスナーを使用して、DOM の準備が整ったことを示すイベントが発生したときにのみコードを実行することもできます。

于 2013-02-10T18:24:30.400 に答える
1

external.js ファイルへの URL が正しいと仮定すると、問題は js ファイルの同期ロードにある可能性があります。

js ファイルがダウンロードされるとすぐに、実行が開始されます。DOM の読み込みが完了する前にこれが発生した場合、DOM は<a>まだタグが存在しないため、タグを見つけることができません。

<BODY>仮説をテストするには、タグの末尾に外部 js ファイルを含めて、それが機能するかどうかを確認します。

この問題を完全に修正するには (また、本体の最後に JS ファイルを含めたくない場合は、次のいずれかで読み込みを延期できます。

  1. 外部ライブラリ (jquery など) を使用してコードを内部に配置する$(document).ready()
  2. コードをwindow.onloadイベント内に配置する
  3. 独自の「準備完了」イベントをトリガーする
于 2013-02-10T18:26:40.380 に答える