2016-07-15 3 views
0

jQueryの:フィルタクラスと同じクラス

$("#add-btn-text").click(function(){ 
 
    \t var $that = $(this), 
 
     classes = $that.attr('class'), 
 
     theDynamicClass = classes.replace('btn', '').replace('btn-primary', '').trim(), 
 
\t \t 
 
     $boxWithSameClass = $(".li."+theDynamicClass); 
 

 
    \t $boxWithSameClass.toggleClass("hide-me added"); 
 
    \t 
 
});
.hide-me {color:rgba(0,0,0,0.1);} 
 
.added {color:rgba(0,0,0,1);} 
 
.top-added {color: rgba(0,170,200,1);}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> 
 
<!doctype html> 
 
<html> 
 
<head> 
 
<meta charset="UTF-8"> 
 
<title>Test</title> 
 
</head> 
 

 
<body> 
 

 
<div class="col-md-4 label-wrap"> 
 
\t <h1 class="top-service">header</h1> 
 
\t \t <ul class="li-wrap"> 
 
\t \t \t <li class="hide-me add-btn point dynamicClass1" id="1a">lorem 1</li> 
 
\t \t \t <li class="hide-me add-btn point dynamicClass2">lorem 2</li> 
 
\t \t \t <li class="hide-me add-btn point dynamicClass3">lorem 3</li> 
 
\t \t \t </ul> 
 
</div> 
 

 

 
<div class="row row-centered"> 
 
\t <div class="col-md-4 col-centered service-detail"> 
 
\t \t <h2>lorem 1</h2> 
 
\t \t <h3>subhead</h3> 
 
\t \t \t <p>some text</p> 
 
\t </div> 
 
\t <div class="col-md-2 col-centered service-detail service-pos"> 
 
\t \t <ul class="service-btn-2"> 
 
\t \t \t <li><button type="button" class="btn btn-primary" id="add-btn-text" data-dynamicclass="dynamicClass1">add</button></li> 
 
\t \t \t <li><button type="button" class="btn btn-primary">other button</button></li> 
 
\t \t </ul> 
 
\t </div> 
 
</div> 
 

 
</body> 
 
</html>

を持つ要素を検索すると、私はボタンを備えたいくつかののdivのを持っています。クリックするたびに、ボタンと同じクラスのliにクラスが追加されます。

解決策を探して見つけましたが、それはうまくいくと思いますが、うまく機能しません。

jqueryの-コード:

$("#add-btn-text").click(function(){ 
    var $that = $(this), 
    classes = $that.attr('class'), 
    theDynamicClass = classes.replace('btn', '').replace('btn-primary', '').trim(), 

    $boxWithSameClass = $(".li."+theDynamicClass); 

    $boxWithSameClass.toggleClass("hide-me added");  
}); 

uは、ボタンをクリックした場合、私は、それを理解したように、動的クラスは他のクラスをフィルタリングし、葉のみそれぞれに異なっている、一つの「ダイナミック」ボタン。次に、boxWithSameClassは、他のdivのliを識別します。divは、同じ「動的」クラスを持ち、必要な/望ましくないクラスをliに追加/削除します。

私は正しいですか?私は理解していない、なぜそれが動作していない。

HTMLコードBUTTON:

<div class="col-md-2 col-centered service-detail service-pos"> 
    <ul class="service-btn-2"> 
    <li><button type="button" class="btn btn-primary exp" id="add-btn-text">Hinzufügen</button></li> 
    <li><button type="button" class="btn btn-primary">Details</button></li> 
    </ul> 
    </div> 
</div> 

HTMLコードLIST:

<div class="col-xs-12"> 
    <ul> 
    <li class="exp">Exposés</li> 
    <li>Textdesign</li> 
    <li>Anzeigenkampagnen</li> 
    <li>Geschäfts- und Presseberichte</li> 
    <li>Bautafelgestaltung</li> 
    <li>Außenwerbung</li> 
    </ul> 
</div> 

CSS:また

.hide-me {color:rgba(0,0,0,0.1);} 
.added {color:rgba(0,0,0,1);} 
.top-added {color: rgba(0,170,200,1);} 

、私は何をしようとしていることである。

ユーザーは別のli、whをクリックできますichが強調表示されます。強調表示されたすべてのliは、フォームによって転送されます。つまり、顧客は露出を望んでいるので、今すぐ見ることができる露出をクリックします。 これで、お客様はバイアンプフォームに記入して送信します。すべての強調表示された李はそれと共に送ってください。

これは可能ですか?私はこのトピックに関するスレッドを見つけるために何を検索すべきかわかりません。 これは追加質問です。誰かが私にヒントを与えることができたらうれしい。 ;)

+0

あなたはそれのためのフィドルを提供してくださいできますか? –

答えて

0

試しこのJS FIddle

$('.service-btn-2').on('click','button', function(){ 
    var btn_class = $(this).attr('class').split(" "); 
$('.whatever').find('.'+btn_class[0]).toggleClass("hide-me"); 

})。

ボタンをクリックすると、クラスを同じクラスでliに切り替えることになりました。それが正しくない場合は、私を修正してください:)

+0

そのように簡単です。ありがとうございました。 私は、異なるliの異なるクラスが最初の場所にあることを確認するだけです。私は正しい? – Buntstiftmuffin

+0

強調表示されたliを持つ各ulにはヘッダーh1があります。 liは正しく切り替わります。さらに、このdivに最も近いh1を同じdiv内に追加してクラスを追加します。 ( 'クリック ' 'ボタン'、機能(){ ' \t \t \t' VAR btn_class = $(この).ATTR( 'クラスの私のコード '$('。サービス-BTN-2')。 '); .split( ""); ' \t \t' $('。label-wrap ul ')検索('。 '+ btn_class [0])toggleClass( "hide-me added"); ' \t \t \t '$ wrap = $( 'li')。closest( '。ラベルラップ');' \t \t '$ wrap.find( 'h1')。toggleClass( 'top-added'、$ wrap。 find( 'added added')。length> 0); ' \t \t});' しかし、今では3つのdivのすべてのヘッダーにこのクラスが追加されています。 – Buntstiftmuffin

+0

はい、あなたはそうです:)あなたはそれが正しい答えだと思うならば答えを受け入れてください。これは、https://jsfiddle.net/xxb7fd8q/9/のように行を追加するだけです: $( '.whatever')。find( '。' + btn_class [0])。nearest( 'div' ).find( 'h1')。addClass( 'アクティブ'); –

0

あなたのボタンのHTMLを使用すると、dynamicclass="dynamicClass1"ではなくclass属性に動的なクラス値を持つこの

<li><button type="button" class="btn btn-primary" id="add-btn-text" data-dynamicclass="dynamicClass1">add</button></li>

です。しかし、あなたのjqueryでは、間違いであるクラス属性から動的な値を取得しようとしています。

間違いです。

classes = $that.attr('class'), 
theDynamicClass = classes.replace('btn', '').replace('btn-primary', '').trim(), 
にあなたのロジックを変更し

theDynamicClass = $that.data('dynamicclass'); 

の下にもtoggleClass引数が正しくないように、あなたは

単一の引数/クラスに合格しなければなりませんdata属性から動的クラスを読みます最終的な機能コードは以下のようになります。セレクタ$(".li."+theDynamicClass)で1つのより多くの間違いが、li前には.ありません$("li."+theDynamicClass)注意する必要がありますがありました:

$("#add-btn-text").click(function(){ 
     var $that = $(this); // make sure you end each line with a ; 
     theDynamicClass = $that.data('dynamicclass'); 

     $boxWithSameClass = $("li."+theDynamicClass); 

     $boxWithSameClass.toggleClass("hide-me").toggleClass("added"); 
}); 

ホープこれは

EDIT 1に役立ちます。以下のデモの作業中jqueryをlatstバージョン2.1.1に変更しました。何らかの理由で古いバージョンを使用したい場合は、コードを

theDynamicClass = $that.attr('data-dynamicclass');に変更する必要があります。dataプロパティは、1.4.3バージョン以降にのみ提供されるためです。

$("#add-btn-text").click(function(){ 
 
    debugger; 
 
    var $that = $(this); // make sure you end each line with a ; 
 
    theDynamicClass = $that.data('dynamicclass'); 
 

 
    $boxWithSameClass = $("li."+theDynamicClass); 
 

 
    $boxWithSameClass.toggleClass("hide-me").toggleClass("added"); 
 
});
.hide-me {color:rgba(0,0,0,0.1);} 
 
.added {color:rgba(0,0,0,1);} 
 
.top-added {color: rgba(0,170,200,1);}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!doctype html> 
 
<html> 
 
<head> 
 
<meta charset="UTF-8"> 
 
<title>Test</title> 
 
</head> 
 

 
<body> 
 

 
<div class="col-md-4 label-wrap"> 
 
\t <h1 class="top-service">header</h1> 
 
\t \t <ul class="li-wrap"> 
 
\t \t \t <li class="hide-me add-btn point dynamicClass1" id="1a">lorem 1</li> 
 
\t \t \t <li class="hide-me add-btn point dynamicClass2">lorem 2</li> 
 
\t \t \t <li class="hide-me add-btn point dynamicClass3">lorem 3</li> 
 
\t \t \t </ul> 
 
</div> 
 

 

 
<div class="row row-centered"> 
 
\t <div class="col-md-4 col-centered service-detail"> 
 
\t \t <h2>lorem 1</h2> 
 
\t \t <h3>subhead</h3> 
 
\t \t \t <p>some text</p> 
 
\t </div> 
 
\t <div class="col-md-2 col-centered service-detail service-pos"> 
 
\t \t <ul class="service-btn-2"> 
 
\t \t \t <li><button type="button" class="btn btn-primary" id="add-btn-text" data-dynamicclass="dynamicClass1">add</button></li> 
 
\t \t \t <li><button type="button" class="btn btn-primary">other button</button></li> 
 
\t \t </ul> 
 
\t </div> 
 
</div> 
 

 
</body> 
 
</html>

+0

それは本当に私のせいです。しかし、それはまだ動作しません。 $ boxWithSameClassは定義されていません。 theDynamicClassと最後の行と同じです。なぜ分かっていないのですか?*?* – Buntstiftmuffin

+0

jqueryの古いバージョンに基づくテンプレートを購入しました。 更新したい場合は、バージョンを変更する必要がありますか?古いスクリプトはまだ機能しますか? – Buntstiftmuffin

+0

はい、そのほとんどがうまくいかなければなりません...バージョンの変更に関して廃止されたものはほとんどありません。もしテンプレートの人に連絡して、更新されたバージョンを尋ねることができればもっと良いでしょう。彼らは新しいバージョンを持っているかもしれません..より良いチェックを.. –

関連する問題