Javascript自定义选项卡添加到代码:如果选项卡为空,则隐藏内容

时间:2013-01-26 04:00:14

标签: javascript jquery

我尝试向标签添加动态内容,并在标签为空时隐藏内容

html代码

<ul id="tabs">
    <li><a href="#" name="#tab1">One</a></li>
    <li><a href="#" name="#tab2">Two</a></li>
    <li><a href="#" name="#tab3">Three</a></li>
    <li><a href="#" name="#tab4">Four</a></li>
</ul>

<div id="content_tabs">
    <div id="tab1">content 1</div>
    <div id="tab2">content 2</div>
    <div id="tab3">content 3</div>
    <div id="tab4">content 4</div>
</div>

js代码

function resetTabs(){
    jQuery("#content_tabs > div").hide(); //Hide all content
    jQuery("#tabs a").attr("id",""); //Reset id's      
}

var myUrl = window.location.href; //get URL
var myUrlTab = myUrl.substring(myUrl.indexOf("#")); // For mywebsite. com/tabs.html#tab2, myUrlTab = #tab2     
var myUrlTabName = myUrlTab.substring(0,4); // For the above example, myUrlTabName = #tab

jQuery(function(){
    jQuery("#content_tabs > div").hide(); // Initially hide all content
    jQuery("#tabs li:first a").attr("id","current"); // Activate first tab
    jQuery("#content_tabs > div:first").fadeIn(); // Show first tab content

    jQuery("#tabs a").on("click",function(e) {
        e.preventDefault();
        if (jQuery(this).attr("id") == "current"){ //detection for current tab
         return       
        }
        else{             
        resetTabs();
        jQuery(this).attr("id","current"); // Activate this
        jQuery(jQuery(this).attr('name')).fadeIn(); // Show content for current tab
        }
    });

    for (i = 1; i <= $("#tabs li").length; i++) {
      if (myUrlTab == myUrlTabName + i) {
          resetTabs();
          jQuery("a[name='"+myUrlTab+"']").attr("id","current"); // Activate url tab
          jQuery(myUrlTab).fadeIn(); // Show url tab content        
      }
    }
});

beauty css

#tabs {
  overflow: hidden;
  width: 100%;
  margin: 0;
  padding: 0;
  list-style: none;
}

#tabs li {
  float: left;
  margin: 0 -15px 0 0;
}

#tabs a {
  float: left;
  position: relative;
  padding: 0 40px;
  height: 0; 
  line-height: 30px;
  text-transform: uppercase;
  text-decoration: none;
  color: #fff;
  border-right: 30px solid transparent;
  border-bottom: 30px solid #3D3D3D;
  border-bottom-color: #777\9;
  opacity: .3;
  filter: alpha(opacity=30);      
}

#tabs a:hover,
#tabs a:focus {
  border-bottom-color: #2ac7e1;
  opacity: 1;
  filter: alpha(opacity=100);
}

#tabs a:focus {
  outline: 0;
}

#tabs #current {
  z-index: 3;
  border-bottom-color: #3d3d3d;
  opacity: 1;
  filter: alpha(opacity=100);     
}

此处演示 http://jsfiddle.net/uVNFp/95/

如果有人知道我如何隐藏内容,如果标签为空

,则表示感谢

由于

3 个答案:

答案 0 :(得分:2)

http://jsfiddle.net/tdf22/1/

原始小提琴的变化:

  • 删除了<div id="tab2">
  • 的内容
  • 添加以下内容。
$("#content_tabs > div:empty").each(function() {
    $("#tabs > li").eq($(this).index()).hide();
});

修改

在回答你对空白的评论时,我创造了这个小提琴: http://jsfiddle.net/tdf22/3/

在这一个中,我:

  • 添加了以下jQuery自定义表达式
$.expr[":"].emptyOrWhiteSpace = function(obj){
  var $this = $(obj);
  return ($.trim($this.html()) === "");
};
  • 并更改了此行

    $(“#content_tabs&gt; div:empty”)。each(function(){

  • 到此

    $(“#content_tabs&gt; div:emptyOrWhiteSpace”)。each(function(){

答案 1 :(得分:1)

古斯塔沃,这只是我放在一起的快速答案,以便你有所作为。这可以以更专业的方式完成。 http://jsfiddle.net/tdf22/8/

我只是在你的javascript底部添加了这个:

var tabs = $('#tabs li');
for (var i=0; i<tabs.length; ++i) {
  if (tabs[i].style.display !== 'none') {
    tabs[i].firstChild.id = 'current'; 
    $('#tab'+(i+1)).show();
    return false;
  }   
}

答案 2 :(得分:0)

var El = document.getElementById("El"); //replace
If(El.hasChildNodes()) {
      El.style.display = "block";
    } else {
        El.style.display = "none";
    }