2016-06-13 14 views
1

JavaScriptを使って定期的にノードを表示/非表示にしていますが、表示するときに特定のクラスのノードをinline-blockblockではなく)に設定する必要があります。 div sはdata-dojo-attach-pointによって参照されているノードがDojoに特定のクラスを持っているかどうかをチェックする方法は?

show: function (div) { 
    if (typeof div === 'object' && typeof div.style === 'object') { 
     if (div.class == "inline-block-class") //this doesn't work 
     { 
      div.style.display = "inline-block"; 
     } else { 
      div.style.display = "block"; 
     } 
    } 
} 

- 私は完全にthis.someAttachPointのようなもので動作することができますが、ときに私:しかし、私はinline-blockクラス、残りのソートに問題があり、classは、この文脈ではnullです私の機能ではdivのような他の変数にそれをラップすると、ノードのCSSセレクタだけが得られます。これはオブジェクトですが、FireBugでそのプロパティを取得することはできません。

私は別のパラメータ、このノードはinline-blockなければならないことを私に言ってフラグを追加することでこの問題を回避することができますが、それは汚いだとエラーの別の機会なので、私は、関数内でblock/inline-block区別を行うことを好むだろう。

答えて

3

DOMノード上のクラスを確認し、スタイルを変更するdojo/dom-classdojo/dom-styleモジュールを使用してください。

show: function (div) { 
if (typeof div === 'object' && typeof div.style === 'object') { 
    if (domClass.contains(div, "inline-block-class")) 
    { 
     domStyle.set(div, 'display', 'inline-block'); 
    } else { 
     domStyle.set(div, 'display', 'block'); 
    } 
} 
} 

この方が良い解決法は、CSSを使用し、JavaScriptを使用せずにdiv.style.displayを制御することです。 Javascriptでクラスを変更し、CSSにスタイリングを処理させます。

+0

最後の文について、私はhide(div)の設定をnoneに設定することはこれに相補的なので、私の場合は純粋なCSSアプローチが適用できないようです。表示を設定せずにdivを隠す:何も私はやり方がわからない、適切な表示スタイルを更新するのが簡単なのかどうか気にしない。 –

+1

各状態について、クラスを定義します。 'display:none'、' display:inline-block'の '' inline-block-class''、 '' display:block''の '' block-class'のような ''不可視 ''のようなものです。そして今、Javascriptでクラスを操作するだけで、CSSは自動的に変更されます。 – Himanshu

+1

あなたのコメントからのアプローチは理にかなっています - ディスプレイnone!importantで隠されたクラスを定義して追加して、ノードを非表示にしてそれを削除します。 –

2

DOM要素divElement.classListプロパティを使用すると、メソッドcontainsが公開されます。

指定されたクラス値が要素のクラス属性に存在するかどうかを確認します。

if (div.classList.contains("inline-block-class")) 
{ 
    div.style.display = "inline-block"; 
} else { 
    div.style.display = "block"; 
} 
関連する問題