2017-07-21 21 views
0

JSONデータをJavaScriptに解析するのが難しいです。 JSONだけでCSS機能をカスタマイズできるようにしたかったのです。たとえば、基本的なボタンを作成したかったのです。私はCSSスタイルを作成し、それをHTMLにリンクしました。しかし、JavascriptがJSONデータを読み込んだときに正しい答えが得られるかどうかを確認する方法はわかりません。 CSSには数値などが含まれているため(50%)、カスタマイズするのが難しくなります。CSS(外部JSONファイルからのJSONデータ)をカスタマイズするJSONデータ*更新された問題(JSONデータから配列を作成する方法)

私は、ボタンのサイズ、background-colorpaddingとボタンのテキストを変更したかったのです。

誰でも私にこれを手伝ってもらえますか?ありがとう 私はHTMLに

var info=JSON.parse(request.responseText); 

------ JSONファイルここ------

{ 
     "button": { 
     "width" : "100%", 
     "backgroundColor": "#4CAF50", 
     "border": "none", 
     "color": "red", 
     "padding": "15px 32px", 
     "textAlign": "center", 
     "textDecoration": "none", 
     "display": "inline-block", 
     "fontSize": "16px", 
     "margin": "4px 2px", 
     "cursor": "pointer" 
     } 
    } 

JS file 
window.onload = loadJSON; 
function loadJSON() 
{ 
var request; 
    if (window.XMLHttpRequest){ 
     request=new XMLHttpRequest(); 
    } else { 
     request =new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

    request.onreadystatechange = function() 
     { 
     if ((request.status ===200) && 
      (request.readyState ===4)) 
      { 

      var info=JSON.parse(request.responseText); 

      if(info!= null) 
       { 
        Object.keys(info).forEach(function(k) { 
        $('<' + k + ' />', info[k].attr).css(info[k].css).appendTo('#container'); 
        }); 

       } 
       else {alert("error")}; 
      } 
     } 

最新のコードがあるとJSONを解析するために、このコードを使用していました。 2つ以上のボタンをカスタマイズしたいと思ったら可能でしょうか?私はそれを解決できないので、コードはどうあるべきですか?

+0

で行く(https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/JSON)、残りの質問...私はあなたがほしいものの手がかりを持っていません。あなたはその質問を精緻化できますか? – Teemu

+0

あなたはオブジェクトからJSONを読み込み、javascriptに応じてボタンのスタイルプロパティを変更しますか?そうですか?質問は本当に私が恐れることはあまり明確ではありません。あなたはいくつかの既存のCSSについて言及していますが、いくつかのJSONにはCSSのような情報が含まれていますが、それらのリンクが何であるかは不明です。また、何か試してみましたか? Javascriptを使って要素のスタイルを設定する方法を知っていますか? JSON/JavaScriptオブジェクトからプロパティを読み取る方法を知っていますか?あなたが何を望んでいるのか、何を抱えているのかははっきりしていません。 – ADyson

+0

はい、私はオブジェクトからJSONを読み込み、javascriptに応じてボタンのスタイルプロパティを変更したいと思っていました。私はJSONデータをJavaScriptに解析する方法を知っています。 CSS、HTML、JavaScriptを使用するだけでボタンアイコンをカスタマイズすることができます。私はJSONファイルからデータを抽出し、プログラムがボタンの既存の機能をカスタマイズできるように、新しいものを試したがっていました。しかし、私は、ボタンの中のテキストを変更することしかできません。たとえば、「私をクリックしてください。」ボタンのサイズや色などを変更することはできません。 – Qils

答えて

1

オブジェクトの構造は、jQueryが新しい要素を作成するときに期待するCSSプロパティとよく似ています。したがって、要素を作成するために使用するjQueryオブジェクトにオブジェクトを適用するだけで済みます。

要素の種類を指定するには、Object.keysを使用してオブジェクトのプロパティを取得し、ループオーバーすることができます。

あなたは要素のテキストを設定したい場合は、CSSのプロパティを供給するために、あなたのデータ構造を修正する必要があるだろうとHTMLは別に属性なので、彼らは関連するメソッドを介して適用することができ、このような何か:

var obj = { 
 
    button: { 
 
    css: { 
 
     width: "100%", 
 
     backgroundColor: "#4CAF50", 
 
     border: "none", 
 
     color: "red", 
 
     padding: "15px 32px", 
 
     textAlign: "center", 
 
     textDecoration: "none", 
 
     display: "inline-block", 
 
     fontSize: "16px", 
 
     margin: "4px 2px", 
 
     cursor: "pointer" 
 
    }, 
 
    attr: { 
 
     text: 'Foo' 
 
    } 
 
    }, 
 
    a: { 
 
    css: {}, 
 
    attr: { 
 
     href: 'http://stackoverflow.com', 
 
     text: 'Visit StackOverflow.com' 
 
    } 
 
    } 
 
} 
 

 
Object.keys(obj).forEach(function(k) { 
 
    $('<' + k + ' />', obj[k].attr).css(obj[k].css).appendTo('#container'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"></div>
注意すべき

ことの一つは、オブジェクトのプロパティの順序が保証されないということですので、あなたが順序に依存する必要がある場合、私はあなたがの配列にオブジェクトからデータ構造を変更することをお勧めしたいですオブジェクト。

+0

ご協力いただきありがとうございます!それは多くの助けになります。しかし、私はJavascriptに外部JSONファイルを解析していますが、メソッドは同じですか? – Qils

+0

jQueryオブジェクトに与えられた2番目の引数を削除し、 'obj [k] .css'を' obj [k] 'に変更するだけです。また、返されるJSONを制御できない場合は、作成する要素のテキストを設定するのがずっと難しくなります –

+0

助けてくれてありがとう。しかし、このコードは何を意味しているのですか?私は実際にあなたが使った用語「k」を手に入れません。さらに、コーディングで使用した用語「ボタン」の兆候もありません。私は「ボタン」構文が使用されていないにもかかわらず、コードが 'ボタン'を生成する方法に興味があります。 Object.keys(obj).forEach(function(k){ $( '<' + k + ' />'、obj [k] .attr).css(obj [k] .css).appendTo( '#container'); }); – Qils

0

ここであなただけの[ドキュメントを読む]、1構文解析の問題については、より解決https://jsfiddle.net/sopv9652/3/

var data = { 
 
    "button": { 
 
    "width" : "100%", 
 
    "backgroundColor": "#4CAF50", 
 
    "border": "none", 
 
    "color": "red", 
 
    "padding": "15px 32px", 
 
    "textAlign": "center", 
 
    "textDecoration": "none", 
 
    "display": "inline-block", 
 
    "fontSize": "16px", 
 
    "margin": "4px 2px", 
 
    "cursor": "pointer" 
 
    } 
 
} 
 

 
var tags = Object.keys(data); 
 

 
$.each(tags, function(i){ 
 
\t $('body').append($('<' + tags[i] + '>')); 
 
    $(tags[i]).css(data[tags[i]]); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

ちょうど、OPは、JSONの要素をビルドして、既存のものを修正するのではなく、*ビルドすることを望んでいます。また、2番目のループは必要ありません。 –

+0

@RoryMcCrossan ...コードが更新されました... – Shiladitya

関連する問題