2016-03-23 19 views
0

これはこれまで私が持っていたものです。基本的には、MacユーザーにはAFPリンクを、PCユーザーにはWindows IEスタイルのリンクを使用する内部Webサイトがあります。過去にページを別々に管理してきましたが、私はそれらを統一しようとしています。私はdivをIDの "brandsmac"と "brandspc"で使い、それぞれのタイプのユーザーにとって必要でない部分を隠そうとしています。私がこれを実行すると、私のページは空白に戻ります。ここに別のレンチを投げるために、これは純粋なHTMLのフロントページを持つWordpressサイトです。これがフロントページです。私はここで同様の記事を見つけ、多くの人が助けてくれましたが、私はロードブロッキングを打ちました。前もって感謝します。OSに基づいてHTML要素を表示するにはどうすればよいですか?

function loadBrandsPage() { 
    var OSName="Unknown OS"; 
    if (navigator.appVersion.indexOf("Win")!=-1) { 
     OSName="Windows"; 
    } else { 
     OSName="MacOS"; 
    } 
    if(OSName == "Windows") { 
     document.getElementById("brandsmac").style.display = 'none'; 
     document.getElementById("brandspc").style.visibility="visible"; 
    } 
    if(OSName == "MacOS") { 
     document.getElementById("brandsmac").style.visibility="visible"; 
     document.getElementById("brandspc").style.display = 'none'; 
    } 
} 
+0

私はあなたの関数を呼び出す場合、私は「にReferenceErrorを:Windowsのは定義されていません」を取得 –

+0

あなたは、文字列の前後に引用符の「Windows」と「MacOSのを」忘れてませんか? – Brett

+0

あなたの答えBrettとRolandに感謝します。私はちょうどWindowsとMacOSの引用符がないことに気づいた。私はそれを修正しましたが、まだ何もありません。 –

答えて

0

あなたはCSS displayvisibilityの混合物を使用しています。 document.getElementById("brandspc").style.visibility="visible";の行をdocument.getElementById("brandspc").style.display="block";に変更すると動作します。

私はあなたがそうどんな結果が得られないであろうことのvisibilityを変更しようとdisplay: none;との両方の要素(#brandspc#brandsmac)を非表示にすることでスタートしましたと仮定しています。

display: none:DOMから要素を削除します。

visibility: hidden:要素をユーザーから隠すと、要素の間隔が維持されます。


ページロード時(コメントに記載されているように)に起こるのではなく、自己呼び出し機能を利用できます。既存の関数を括弧で囲むだけです。

(function loadBrandsPage() { 
    var OSName="Unknown OS"; 
    if (navigator.appVersion.indexOf("Win")!=-1) { 
     OSName="Windows"; 
    } else { 
     OSName="MacOS"; 
    } 
    if(OSName == 'Windows') { 
     document.getElementById("brandsmac").style.display = 'none'; 
     document.getElementById("brandspc").style.display="block"; 
    } 
    if(OSName == 'MacOS') { 
     document.getElementById("brandsmac").style.display="block"; 
     document.getElementById("brandspc").style.display = 'none'; 
    } 
})(); 

これを反映するようにフィーリングを更新しました。

more info

Here's a demo of it working with the above changes

+0

あなたの答えEnigmaRMに感謝します。私はあなたのデモを見て、それをテストするためにあなたがやったことに感謝します。ただし、ソリューションはクリックするボタンに依存します。私はページの読み込み時にこの関数を実行することを望んでいました。私はコード ''を表示する別の投稿を見ました(http://stackoverflow.com/questions/3961422/conditional-display-of-html-element-forms)。どちらも私のために働いていないようです。 –

+0

ボタンは機能をトリガーする単なる方法でした。関数をトリガするイベントを使用することができます。私はページロード時に自動的に起こるように私の答えを更新しました。別のルートに行き、DOMを準備するのを待つために関数をイベントリスナーに割り当てることもできます。 – EnigmaRM

-1

あなたは、オペレーティング・システムをこのように見つけることができます。

os = navigator.platform; 
関連する問題