2011-12-28 9 views
0

タイトルが示すように、違いは何ですか?obj.setAttribute( 'whatever'、value)とobj.whatever = valueの違いは何ですか?

私は後者が前者が少なくともできることができると思います。

私の意見は正しいですか?

PSは:objがDOM要素である

+0

はどちらもほとんど同じことを行います。それがあなたの質問だったら。もっと詳しくはこちらをご覧ください:http://stackoverflow.com/questions/3919291/javascript-setattribute-vs-attribute – powerbuoy

+1

jQueryではなく、JSに関する実際の質問を見るのは本当にうれしいです。それが言われている、他の質問を参照してください:) –

+0

重複する質問を申し訳ありません。 – Determinant

答えて

1

setAttributeはDOM要素メソッドです。これはDOM要素でのみ使用できます。あなた自身のオブジェクトでそれを使用しようとすると、自分で作成しない限り、そのメソッドをサポートしていないので、TypeErrorがスローされます。たとえば:

var myObject = {}; 
myObject.setAttribute('foo', 'bar');   // this will throw a TypeError 

var myDiv = document.createElement('div'); 
myDiv.setAttribute('foo', 'bar');    // this works fine 


しかし、あなたが説明した第二の方法は、独自のオブジェクトにプロパティとメソッドを割り当てるための有効な方法であり、DOMは、オブジェクト(およびDOMは内のオブジェクトの中に焼いたいくつかの特別なものがありますあなたが観察したようなonclickのようなほとんどのブラウザ)。

var myObject = {}; 
myObject.foo = 'bar'; 
console.log(myObject.foo);  // --> 'bar' 
console.log(myObject['foo']); // --> 'bar' 

var myDiv = document.createElement('div'); 
myDiv.foo = 'bar'; 
myDiv.onclick = function() { console.log('clicked!') }; 
// same as: <div foo="bar" onclick="function() {console.log('clicked'!) }"></div> 


あなたはElementインタフェースと、ここでサポートされるメソッドの詳細を読むことができ
http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-745549614(setAttributeメソッドのためのビットをスクロールダウン)

0

一つの大きな違いは、変数名になります - 次の例を取る:

また
obj.what-ever = value; 
/// syntax error - the parser attempts to subtract obj.what 
/// from the nonexistent variable 'ever'. 

obj.setAttribute('what-ever',value); 
/// this works! 

、私の知る限り、obj.setAttributeは、ネイティブjavascriptの方法ではありません - ネイティブに、次のように許可されていない名前のオブジェクトにキーを設定します。 obj['@#^&*^'] = value;

+0

'何でも'様々な解釈のない通常の単語です。 obj.xxx = valueを使用して存在しない属性を設定することはできますか? – Determinant

+0

'setAttribute'は標準DOMです。 HTMLで直接行うことは標準のJavaScriptではありません。 – Quentin

+0

ここでは、 'obj'がDOM要素であると仮定しています。 – nnnnnn

1

1つはプロパティを設定し、もう1つは属性を設定します。

一部の属性は(例えば<input type="password">myInput.type), some do not (such asand myInput.className . Some properties do not have an attribute (such as myDiv.getElementsByTagName`として)同じ名前のプロパティに直接マップ。

Internet Explorer 7以下(およびQuirksモードの新しいIE)では、プロパティと属性が互いにマップされているかどうかにかかわらず、setAttributeが同じ名前のプロパティに直接マップするバグがあります。

square backet notationは識別子の代わりに文字列を使用するため、識別子で表現できないオブジェクトのプロパティにアクセスできることに注意してください。例えばfoo.barfoo['bar']は同じですが、foo['bar-bar']はドット表記を使用して表すことはできません)。

+0

マッピング標準について説明するリファレンスはありますか? – Determinant

関連する問題