2016-11-01 11 views
1

作成されたNodeオブジェクトのclassNameプロパティにアクセスする方法について少し混乱しましたか?JavaScript内のオブジェクト内のノードを変更する

var track = { 
    mod: { 
    el: document.body.appendChild(document.createElement('div')), 
    el.className: 'w3-container w3-teal w3-hover-green' 
    } 
}; 

これ、残念ながら、エラーが用意されています

Uncaught SyntaxError: Unexpected token . 

私は単にオブジェクト内のオブジェクトを作成し、内部オブジェクトのプロパティを変更しようとしています。私はまわりを検索し、classNameの割り当てられたプロパティだけでなく、DOM要素 'className'の実際のプロパティを変更する必要があるため、このレベルのアクセスに固有のものは何も見つかりませんでした。

+0

[カスタム変数をJSON属性として追加する](http://stackoverflow.com/questions/40337412/adding-a-custom-variable-as-json-attribute) –

+1

>私は単純に作成しようとしていますオブジェクト内のオブジェクトとその内部オブジェクトのプロパティを変更することはできません。ただし、元のオブジェクトはいつでも変更できます。 – raina77ow

+1

オブジェクトがまだ作成されている間、オブジェクトのプロパティにアクセスすることはできません。後で 'track.mod.el.className = 'w3-container w3-teal w3-hover-green''を実行する必要があります。 – JJJ

答えて

0

ので、同様にあなたは、すぐに呼び出される関数の式を使用することができます。

var track = { 
    mod: { 
    el: (function() { 
     var el = document.body.appendChild(document.createElement('div')); 
     el.className = 'w3-container w3-teal w3-hover-green'; 
     return el; 
    }()) 
    } 
}; 

これはbodyが存在した後にのみ行うことができます、 もちろん。また、thisは、関数内のtrackまたはtrack.modを参照しません。

+0

私はあなたに同意したことに同意します。それは全体的にはかなりクリーンな解決策です。しかし、あまりにも多くのロジックを一度に置くように思えます。オブジェクトの作成とDOM操作を一度に行うという良い理由はありません。それはコードの行を保存することがありますが、それらを分離する方が良いようです。 – vlaz

+0

この状況では、私が必要なものに応じて後で変更できる汎用トラックオブジェクトを作成しようとしています。畳み込みのビットですが、ジェネリックトラックが必要なたびにトラックオブジェクトを作成して変更する必要なく、必要な処理を行います。 – goetztyler

0

だけで、構文の問題のように思える...それはないだろう。

var track = { 
    mod: { 
    el: document.body.appendChild(document.createElement('div')), 
    el: { 
     className: 'w3-container w3-teal w3-hover-green' 
    } 
    } 
}; 
+0

これは 'mod.el'の割り当てられた値をオーバーライドします。 – Teemu

+1

これは正しくないと思われます。これは3行目に要素を作成して追加し、それを 'el'プロパティへの参照として追加しますが、次の行はその参照を上書きします。 – vlaz

+0

これは、div要素を取り除く 'el'オブジェクトをオーバーライドします。 – user3254198

1

あなたが何をしようとしてそこにかなりきちんとしているが、悲しいことに、JavaScriptがからそれをサポートしていませんボックス。

これは、あなたはまだそれはしかし動作させることができます一つの方法です:

var track = { 
    mod: { 
    el: document.body.appendChild(document.createElement('div')) 
    } 
}; 

// Add the className property here 
track.mod.el.className = 'w3-container w3-teal w3-hover-green'; 
関連する問題