2012-01-27 15 views
2

これはJQueryには些細でなければならないようですが、この関数はフォーム全体を隠しています...誰かが正しい方向に向かうことができますか?data- *属性に基づいて要素を表示/非表示にする

$('form') 
     .children() 
     .filter(function(){ 
      return $(this).data('show', 'pro') 
     }) 
     .show(); 
$('form') 
     .children() 
     .filter(function(){ 
      return $(this).data('show', 'home') 
     }) 
     .hide(); 

答えて

8

data methodに2つの引数を渡しているため、古い値を取得する代わりに設定します。

利用代わりに、この:

$('form') 
     .children() 
     .filter(function(){ 
      return $(this).data('show') === 'pro'; 
     }) 
     .show(); 
$('form') 
     .children() 
     .filter(function(){ 
      return $(this).data('show') === 'home'; 
     }) 
     .hide(); 

ます。また、パフォーマンスのために、あなたのセレクタをキャッシュ(またはendを使用する)ことができます。

+0

$ .data()がフィルタ内で定義されていないようです。 また、コード全体がフォーム全体を隠しているように見えます。 –

+0

私の最後のコメントをスクラッチ...私はちょうどそれが働いているので、ミニマリストフィドルを一緒に投げたので、他の何かがここで起こっている。 –

0

あなたはコードから何をしようとしているのかよくわかりません。 JQと "データ - " にアクセスする

、私が使用します。

$(elementSelector).attr('data-XXX'); 

データ-XXXは、タグの属性です。これは私が見たIE7に戻るすべてのブラウザで機能します。

+2

ソースhtmlコードにある 'data'属性によってのみ選択されます。 jQueryの 'data'メソッドによって追加されたデータでは選択されません! –

+0

彼らのウェブサイトによると、1.4のJQuery .data()はデータ属性を調べます。 –

5

データ・ショーの値は、あなたのHTML内にある各オブジェクトの属性として設定されている場合は、セレクタで完全にこれを行うことができます。説明として

$('form > [data-show="pro"]').show(); 
$('form > [data-show="home"]').hide(); 

  • form明らかフォーム要素
  • >フォームオブジェクト
  • [data-show="pro"] SEの子を選択し、選択lectsデータ・ショーの値は.data() jqueryのメソッドで設定されている場合.show()は、それらの選択したオブジェクト

のshowメソッドを呼び出します"pro"

  • の値に設定されているdata-showという名前の属性を持っている唯一の子供たち前の方法ではうまくいかない場合は、セレクタでより簡単に使用できるデータ値ではなく、クラス名として状態を設定するほうがよいでしょう。これらの値はデータの代わりにクラス名として設定された場合、コードは次のようになります。

    $('form > .pro').show(); 
    $('form > .home').hide(); 
    

    は覚えておいてください、あなたは直接のプレゼンテーションを制御するために使用されるオブジェクトとオブジェクトの状態で複数のクラス名を持つことができますCSSやjQuery操作のセレクタで使用する方がはるかに簡単であるため、オブジェクト(CSSスタイル、可視性、書式など)はdata-xxx属性ではなくクラス名として表現するほうがはるかに優れています。

  • +0

    興味深い...すべてが直接の子孫ではありません。私は '$(" form [data-show = 'foo'] ")を使用しますか?show()'?これはずっと効率的です。 –

    +0

    @ChrisSobolewski - はい、直接の子孫(元のコードであった)だけを探しているのでなければ、 '>'を取り除くことができます。子孫だけでなくすべての子孫が含まれます。 – jfriend00

    関連する問題