2011-10-01 7 views
0

私はほぼ次のような作業をしていますが、多くの混乱したアプローチを行っています。望みは、キーを使用しています:setAttribute()メソッドのプロパティのattr {}の値です。フレームワークはありません。setAttribute()へのJSON

スリムなソリューションを貸してください:あなたはそこにJSONを持っていない

testDiv = document.getElementById("testDiv"); 


attr = { 

    align:"center", 
    title:"The Test Div" 

}; 

//Possible converting JSON to String, the use in setAttribute? 

for(var x in attr) alert(x + " , " + attr[ x ]); 

testDiv.setAttribute(x , attr[ x ]); 
+0

どうしたのですか? 'for(var x in attr)testDiv.setAttribute(x、attr [x]);'はうまく動作するはずです。もちろん、文字列以外の属性については、IEのsetAttribute自体に問題があります。代わりにプロパティを使用することを検討することをお勧めします。これはまだ 'for(var x in attr)testDiv [x] = attr [x];だけです。 – bobince

+0

正確に何を達成しようとしていますか?属性をHTMLノードにマップするだけであれば、メソッドは正常に動作します。ただし、forループの中でブロックの周りに中カッコを入れる必要があります。そうしないと、ループ内の2番目のステートメントは実行されません。 'for(var x in attr){alert(x +"、 "+ attr [x]); testDiv.setAttribute(x、attr [x]); } '。 –

+0

スタイルのIE回避策を見つけました: http://www.peterbe.com/plog/setAttribute-style-IE – Wasabi

答えて

2

、あなたはオブジェクトリテラルを持っています。とにかく、あなたが正しく理解したら、特定の要素のために指定されたすべての属性を設定したいのですか?あなたは再利用可能な何かしたい場合は関数内のループは簡単に十分にそれを行う必要があります。

function setMultipleAttributes(el, attributes) { 
    for (var attr in attributes) 
    el.setAttribute(attr, attributes[attr]); 
} 

var testDiv = document.getElementById("testDiv"); 

setMultipleAttributes(testDiv, { align : "center", title : "The Test Div" }); 
+0

ソリューションと専門用語の解説に感謝します。 – Wasabi

+0

setMultipleAttributes()メソッドを使用してElement.prototypeを拡張しようとする前にIEの癖を知っていて、DOMの拡張機能にカスタムDTDが含まれている必要がありますか? – Wasabi

0

をあなたの問題は、「JSON」とは何の関係もありません(実際にはJavaScriptのオブジェクトリテラル)または属性を設定します。それは、このです:

for(var x in attr) alert(x + " , " + attr[ x ]); 

testDiv.setAttribute(x , attr[ x ]); 

あなたはforループと中括弧を使用していないので、すぐにそれが実行され、次のステートメントのみ。私は中括弧を追加した場合、上記のコードは次のようになります。

for(var x in attr){ 
    alert(x + " , " + attr[x]); 
} 
testDiv.setAttribute(x , attr[x]); 

setAttributeは、ループ内で呼び出されていない - それだけで終わりに一度と呼ばれています。代わりに、おそらく...

for(var x in attr){ 
    alert(x + " , " + attr[x]); 
    testDiv.setAttribute(x , attr[x]); 
}