2017-08-31 74 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"> 

如果我按一下按鈕染紅了這也沒有包含數據的文件名的紅色作品應該具有0

不透明到目前爲止,我這樣做,但它不會工作:

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

});

+1

您的按鈕沒有SRC –

+0

@RoryMcCrossan OP在使用'src'他這就是我指出的代碼。 –

+0

你檢查你的按鈕'$('。lbtn')。attr('src')'的src屬性,但是沒有屬性src。此外,還有一個缺失'''if if-Statement – OdaYukimura

回答

1

要做到這一點,你可以在data屬性添加到其上imgdata-filename匹配button元素。然後,您可以用它來filter()他們和顯示/隱藏相關的,是這樣的:

$('.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

嗯,這應該與十六進制顏色一起工作嗎? – 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 }); 
    } 
}); 

變種自我= $(本); //這是元素,它觸發了事件,並且由於檢查而需要記住ID。當你試圖檢查$('。lbtn')。attr('src')它需要全部三個按鈕並且不起作用 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 +'])')。因爲我只想要隱藏類疊加層的圖像被隱藏 – Begsde