0

コードを文字通り JS Fiddle にコピーしたところ、正常に動作し始めました。エラーなし。

@supports クエリが true と評価された場合、特定の単語を Unicode 記号に置き換えようとしています。true と評価されるかどうかを確認する方法は、書き込み可能なスタイルのみが適用されているかどうかを確認することです。

私が得ているエラーは

Uncaught TypeError: Cannot read property 'style' of undefined 

しかし、同じアセットを使用して JS Fiddle でこの正確なコードを使用すると、エラーは発生しません。

JS Fiddle へのリンクは次のとおりです: http://jsfiddle.net/VJm6r/

コードは次のとおりです。

if(document.getElementsByTagName('body')[0].style.zIndex === 0){
//ligatures and @supports supported
}
else{
   //ligatures and @supports not supported
    $(document).ready(function(){
    var map = {
        "About": { regex: /About/g, replacement: "&#xe00f" },
        "Work": { regex: /Work/g, replacement: "&#xe010" },
        "CV": { regex: /CV/g, replacement: "&#xe00c" },
        "Resume": { regex: /Resume/g, replacement: "&#xe00e" },
        "down": { regex: /down/g, replacement: "&#xe00d" },
        "Mail": { regex: /Mail/g, replacement: "&#xe011" },
        "Dribbble": { regex: /Dribbble/g, replacement: "&#xe015" },
        "Facebook": { regex: /Facebook/g, replacement: "&#xe013" },
        "GooglePlus": { regex: /GooglePlus/g, replacement: "&#xe012" },
        "Twitter": { regex: /Twitter/g, replacement: "&#xe014" }
    }
    $('.nav a').each(function () {
        var obj = $(this);
        var html = $(this).html();
        obj.html(html.replace(map[html].regex, map[html].replacement));
    });
});
}
4

3 に答える 3

3

コードが にある場合、本体がまだ解析されていないため、 は undefined を返します<head>document.getElementsByTagName('body')[0]推奨される修正: スクリプト全体を本文の最後 ( の直前</body>) に移動します。

于 2013-05-24T20:30:28.020 に答える
2

body要素が作成さ れるまで待つ必要があります。getElementsByTagName("body")空の HTML コレクションを返しています。 [0]プロパティを持たない undefined を返していstyleます。すべてを折り返すこと$(document).readyも、ページの一番下に移動することもできます。<body>厳密に言えば、タグの後に移動することもできますが、最初の 2 つのオプションのいずれかがより一般的な方法です。

あなたの jsFiddle はすべてを でラップしている$(window).loadため、そこで動作します。

于 2013-05-24T20:33:24.180 に答える
1

ページがまだ読み込まれている間、JavaScript が実行されています。ラインが実行されたとき、本体はまだロードする機会がなく、何も見つからないdocument.getElementsByTagName('body')[0]ため戻ります。undefined代わりに、本文の後にコードをドキュメントの下部に移動するか、ページが jQuery で読み込まれた後にコードを実行する必要があります。$(document).ready(function() {/*MY CODE HERE */};

于 2013-05-24T20:39:45.393 に答える