用JQuery只显示一个元素

时间:2008-10-03 21:07:20

标签: javascript jquery

我需要在点击链接时一次只显示一个元素。现在我通过再次隐藏所有内容然后切换点击的元素来作弊。这是有效的,除非我希望一切都能再次消失。没有添加“全部隐藏”按钮/链接我该怎么办?我希望能够再次点击链接,并隐藏它的内容。

编辑:Pseudo的代码会起作用,但是这里的html错误地让你相信所有链接都在一个div中。而不是追踪他们所在的位置,而是通过他们的ID来更容易地调用它们。

这是我到目前为止所拥有的:

$(document).ready(function(){
    //hides everything
    $("#infocontent *").hide();

    //now we show them by which they click on
    $("#linkjoedhit").click(function(event){
      $("#infocontent *").hide();
      $("#infojoedhit").toggle();
      return false;
    });

    $("#linkgarykhit").click(function(event){
      $("#infocontent *").hide();
      $("#infogarykhit").toggle();
      return false;
    });

});

和html看起来像:

<div id="theircrappycode">
    <a id="linkjoedhit" href="">Joe D</a><br/>
    <a id="linkgarykhit" href="">Gary K</a>
</div>

<div id="infocontent">
    <p id="infojoedhit">Information about Joe D Hitting.</p>
    <p id="infogarykhit">Information about Gary K Hitting.</p>
</div

这样有大约20个链接。因为我不编码实际的html,我无法控制实际的布局,这是可怕的。可以说,这是组织链接/信息的唯一方法。

4 个答案:

答案 0 :(得分:2)

$("#linkgarykhit").click(function(){
   if($("#infogarykhit").css('display') != 'none'){
      $("#infogarykhit").hide();
   }else{
      $("#infocontent *").hide();
      $("#infogarykhit").show();
   }
   return false;
});

我们也可以DRY这一点:

function toggleInfoContent(id){
   if($('#' + id).css('display') != 'none'){
      $('#' + id).hide();
   }else{
      $("#infocontent *").hide();
      $('#' + id).show();
   }
}

$("#linkgarykhit").click(function(){
    toggleInfoContent('infogarykhit');
    return false;
});

$("#linkbobkhit").click(function(){
    toggleInfoContent('infobobkhit');
    return false;
});

答案 1 :(得分:2)

如果您的标记“命名方案”准确无误,您可以通过为选择器使用RegEx并明智地使用jQuery“not”来避免大量重复代码。

您可以将一次点击事件附加到jQuery集合中,该集合应该执行您想要的操作,因此您不需要添加任何JavaScript,因为您添加了更多Jim或John,如下所示:

$(document).ready( function () {
  $("#infocontent *").hide();

  $("div#theircrappycode > a").click(function(event){
    var toggleId = "#" + this.id.replace(/^link/,"info");
    $("#infocontent *").not(toggleId).hide();
    $(toggleId).toggle();
    return false;
  });
});

答案 2 :(得分:1)

这是一种略有不同的方法,与Pseudo Masochist的代码有一些相似之处。

$(document).ready(function(){
  $("#infocontent *").hide();
  $("#theircrappycode > a").click(statlink.togvis);
});
var statlink = {
  visId: "",
  togvis: function(){
    $("#" + statlink.visId).toggle();
    statlink.visId = $(this).attr("id").replace(/link/, "info");
    $("#" + statlink.visId).toggle();
  }
};

希望你也觉得这很有用。

答案 3 :(得分:0)

我刚开始使用jQuery,所以我不知道这是不是很愚蠢。

function DoToggleMagic(strParagraphID) {
  strDisplayed = $(strParagraphID).css("display");
  $("#infocontent *").hide();
  if (strDisplayed == "none") 
    $(strParagraphID).toggle();
}
$(document).ready(function(){
  //hides everything
  $("#infocontent *").hide();

  //now we show them by which they click on
  $("#linkjoedhit").click(function(event){
    DoToggleMagic("#infojoedhit");
    return false;
  });

  $("#linkgarykhit").click(function(event){
    DoToggleMagic("#infogarykhit");
    return false;
  });        
});