タグに応じて要素を表示/非表示にできるタグボタン付きのページを作成しようとしています。 これは、ループのない私の最初のバージョンです:ループを使用して複数のJQuery関数を定義する
https://jsfiddle.net/Pokipsy/uu7y3x2x/
$(document).ready(function(){
$(".showall").click(function(){
$(".item").show();
$(".filter").text("All elements")
});
$(".show.a").click(function(){
\t \t $(".item").hide();
$(".item.a").show();
$(".filter").text("Tag: a")
});
$(".show.b").click(function(){
\t \t $(".item").hide();
$(".item.b").show();
$(".filter").text("Tag: b")
});
$(".show.c").click(function(){
\t \t $(".item").hide();
$(".item.c").show();
$(".filter").text("Tag: c")
});
});
.clickable:hover {
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="clickable showall">all</li>
<li class="clickable show a">a</li>
<li class="clickable show b">b</li>
<li class="clickable show c">c</li>
</ul>
<h3 class="filter">
All elements
</h3>
<ul>
<li class="a item">first a</li>
<li class="b item">second b</li>
<li class="a b item">third a b</li>
<li class="c item ">fourth c</li>
<li class="c b item">fifth c b</li>
</ul>
それは動作しますが、タグが、私はループを使用しようとしたので、あまりにも多くのであれば、この戦略は非常に長いコードを生成します
https://jsfiddle.net/Pokipsy/f9uqetnn/1/
01より短いコードを作成する$(document).ready(function(){
$(".showall").click(function(){
$(".item").show();
$(".filter").text("All elements")
});
var tags = [".a",".b",".c"];
for(i = 0; i < 3; i++) {
x=tags[i];
$(".show".concat(x)).click(function(){
\t \t $(".item").hide();
$(".item".concat(x)).show();
$(".filter").text("Tag: ".concat(x))
\t \t });
}
});
.clickable:hover {
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="clickable showall">all</li>
<li class="clickable show a">a</li>
<li class="clickable show b">b</li>
<li class="clickable show c">c</li>
</ul>
<h3 class="filter">
All elements
</h3>
<ul>
<li class="a item">first a</li>
<li class="b item">second b</li>
<li class="a b item">third a b</li>
<li class="c item ">fourth c</li>
<li class="c b item">fifth c b</li>
</ul>
が、それは動作しません:どうやらそれは常に私が最初にクリックした場合でも、配列の最後の要素へのクリックを認識しています。私が見ることができないjQueryに問題はありますか?
http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – naortor