タイトルが示すように、違いは何ですか?obj.setAttribute( 'whatever'、value)とobj.whatever = valueの違いは何ですか?
私は後者が前者が少なくともできることができると思います。
私の意見は正しいですか?
PSは:objがDOM要素である
タイトルが示すように、違いは何ですか?obj.setAttribute( 'whatever'、value)とobj.whatever = valueの違いは何ですか?
私は後者が前者が少なくともできることができると思います。
私の意見は正しいですか?
PSは:objがDOM要素である
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メソッドのためのビットをスクロールダウン)
一つの大きな違いは、変数名になります - 次の例を取る:
また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;
'何でも'様々な解釈のない通常の単語です。 obj.xxx = valueを使用して存在しない属性を設定することはできますか? – Determinant
'setAttribute'は標準DOMです。 HTMLで直接行うことは標準のJavaScriptではありません。 – Quentin
ここでは、 'obj'がDOM要素であると仮定しています。 – nnnnnn
1つはプロパティを設定し、もう1つは属性を設定します。
一部の属性は(例えば<input type="password">
とmyInput.type), some do not (such as
and
myInput.className . Some properties do not have an attribute (such as
myDiv.getElementsByTagName`として)同じ名前のプロパティに直接マップ。
Internet Explorer 7以下(およびQuirksモードの新しいIE)では、プロパティと属性が互いにマップされているかどうかにかかわらず、setAttribute
が同じ名前のプロパティに直接マップするバグがあります。
square backet notationは識別子の代わりに文字列を使用するため、識別子で表現できないオブジェクトのプロパティにアクセスできることに注意してください。例えばfoo.bar
とfoo['bar']
は同じですが、foo['bar-bar']
はドット表記を使用して表すことはできません)。
マッピング標準について説明するリファレンスはありますか? – Determinant
はどちらもほとんど同じことを行います。それがあなたの質問だったら。もっと詳しくはこちらをご覧ください:http://stackoverflow.com/questions/3919291/javascript-setattribute-vs-attribute – powerbuoy
jQueryではなく、JSに関する実際の質問を見るのは本当にうれしいです。それが言われている、他の質問を参照してください:) –
重複する質問を申し訳ありません。 – Determinant