我有这样的代码:
<img src="fl_uk.png" class="menulink" />
<div class="test">Something</div>
<img src="fl_uk.png" class="menulink" />
<div class="test">Something2</div>
$('.menulink').click(function(){
if($('.menulink').attr('src') == "fl_pol.png"){
$(this).attr('src',"fl_uk.png");
$('.test').hide('slow');
return false;
}
else
{
$(this).attr('src',"fl_pol.png");
$('.test').show('slow');
return false;
}
});
当我点击img应该更改图像并显示div。当我再次点击图像应该回到第一个和div应该隐藏。这工作正常。但是我想这样做应该有许多imgae按钮和许多div并且点击一个图像按钮之后应该只更改此图像并在图像下方打开div。我不知道他的图像和div有多少,因为它们是从数据库生成的。 如何创建jQuery代码以不重复jQuery代码
答案 0 :(得分:1)
我可能会这样做:
<img src="fl_uk.png" rel="uk" class="menulink" />
<div class="test" rel="uk_div">Something</div>
<img src="fl_pol.png" rel="pol" class="menulink" />
<div class="test" rel="pol_div">Something2</div>
然后
$(".menulink").on("click",function(){
$(".test").hide();
$("div[rel='"+$(this).attr("rel") + "_div']").show());
});
答案 1 :(得分:0)
要回答您的问题,我假设您在这些图片周围有一个容器,例如<div id="images">...</div>
。现在解决方案非常简单:
document.getElementById('images').onclick = function(e) {
e = e || window.event;
var t = e.currentSrc || e.target;
if( !t.tagName) t = t.parentNode;
while( t != this && t.tagName != "IMG") t = t.parentNode;
if( t != this) {
if( t.src == "fl_pol.png") {
t.src = "fl_uk.png";
t.nextSibling.style.display = "none";
}
else {
t.src = "fl_pol.png";
t.nextSibling.style.display = "";
}
return false;
}
};
这是在原始JS中完成的,而不是jQuery,这意味着它要快得多。它还委托事件,因此只有一个监听器,而不是每个映像一个。
答案 2 :(得分:0)
试试这个:
$('.menulink').on('click', function(){
if($(this).attr('src') == "fl_pol.png"){
$(this).attr('src',"fl_uk.png");
$(this).next('.test').hide('slow');
return false;
}else{
$(this).attr('src',"fl_pol.png");
$(this).next('.test').show('slow');
return false;
}
});