jQuery许多相同的元素,一个必须在你点击时启动

时间:2012-03-15 21:49:25

标签: javascript jquery html css

我有这样的代码:

<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代码

3 个答案:

答案 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;
  }
});