2017-08-31 13 views
1

を比較し、私はデータと画像の束を持っているが、このように属性:jQueryの各クラス項目と

<img class="overlay" data-filename="red" src="img1.png"> 
<img class="overlay" data-filename="yellow" src="img2.png"> 
<img data-filename="blue" src="img3.png"> 

したがって、私はこのようなボタンがあります:

<button class="lbtn" style="background-Color:red"> 
<button class="lbtn" style="background-Color:yellow"> 
<button class="lbtn" style="background-Color:blue"> 

私はボタンをクリック赤くした場合

012:ノーデータ・ファイル名の赤が含まれていない画像は、これまでのところ、私はこれをしなかったが、それ文句を言わない仕事0

の不透明度を持たなければなりません

});

+1

あなたのボタンSRC –

+0

@RoryMcCrossan OPは、彼の中で 'src'を使用している必要はありません。あなたは、このようなものは、該当するものを非表示/ filter()にそれらとショーをこれを使用することができます私が指摘しているコードです。 –

+0

ボタン '$( '。lbtn')。attr( 'src')'の属性srcをチェックしますが、属性srcはありません。また、 ')'あなたのif-Statementがなくなっています – OdaYukimura

答えて

1

あなたはimgdata-filenameに一致するbutton要素にdata属性を追加することができ、これを達成するために。

$('.lbtn').click(function() { 
 
    var filter = $(this).data('filter'); 
 
    var $imgs = $('.container img').hide(); 
 
    $imgs.filter('[data-filename="' + filter + '"]').show(); 
 
});
.red { background-color: #C00; } 
 
.yellow { background-color: #CC0; } 
 
.blue { background-color: #00C; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <img class="overlay" data-filename="red" src="img1.png" title="red"> 
 
    <img class="overlay" data-filename="yellow" src="img2.png" title="yellow"> 
 
    <img data-filename="blue" src="img3.png" title="blue"> 
 
</div> 
 

 
<button class="lbtn red" data-filter="red">Red</button> 
 
<button class="lbtn yellow" data-filter="yellow">Yellow</button> 
 
<button class="lbtn blue" data-filter="blue">Blue</button>

+0

これは16進色でもうまくいきますか? – Begsde

+0

はい、それはすべて' data-filename'と 'data-filter'の値に依存しています必要な文字列にすることができます。 –

0

はあなたのコードを少し変更します

$('.lbtn').click(function() { 
var self= $(this); 
$(".overlay").each(function() { 
    if($(this).data('filename') == $(self).attr('src') { 
     $(this).css({ opacity: 0 }); 
    } 
}); 

するvar自己= $(この)。 //これはイベントを発生させた要素で、チェックのためにIDを覚えておく必要があります。 $( '。lbtn')。attr( 'src')をチェックしようとすると、3つのボタンがすべてかかり、動作しません。 ANDボタンにもsrc属性が必要です!

3
  1. 使用属性セレクタで:

attribute selector

説明セレクタない:任意の値で指定された属性を持つ要素を選択します。

:not selector

説明:指定されたセレクタに一致しないすべての要素を選択します。

$('.lbtn').click(function() { 
 
    var color = $(this).attr('style').split(":")[1] 
 
    console.log(color) 
 

 
    $('img:not([data-filename=' + color + '])').css({ 
 
    opacity: 0 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<img class="overlay" data-filename="red" src="img1.png"> 
 
<img class="overlay" data-filename="yellow" src="img2.png"> 
 
<img data-filename="blue" src="img3.png"> 
 

 

 
<button class="lbtn" style="background-Color:red">Click</button> 
 
<button class="lbtn" style="background-Color:yellow">Click</button> 
 
<button class="lbtn" style="background-Color:blue">Click</button>

+1

以前の 'class'属性のハッキングについてのあなたの答えと同様、これは非常に脆弱です。それはうまくいくでしょうが、あなたがUIに置いたルールを忘れてしまった場合は、非常に簡単です。特別なルールを 'style'に追加することで、この作業が中断されます。あるいは、スタイルルールを要素のクラスに入れてコードを改善することさえできます。 JSとUIを結びつけることは本当に悪い考えです。 –

+0

私はこれを正しい '$( '。overlay:not([data-filename =' + color + '])')する必要があります。css({ 'クラスオーバーレイで画像を隠すだけだから – Begsde

関連する問題