0

CSS タブをモバイル デバイス、特に IOS に対応させようとしています。また、ページで 3 つの異なるタブを使用したいと考えています。私はjqueryの知識がないので、例を見つけようとしました。私が見つけた最良の例は、この構造を使用したものです。

<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"> 
<div id="tab1">...</div>
<div id="tab2">...</div>
<div id="tab3">...</div>
<div id="tab4">...</div>
</div>

そしてそのjQueryは;

<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script>
$(document).ready(function() {
    $("#content div").hide(); // Initially hide all content
    $("#tabs li:first").attr("id","current"); // Activate first tab
    $("#content div:first").fadeIn(); // Show first tab content

    $('#tabs a').click(function(e) {
        e.preventDefault();
        if ($(this).closest("li").attr("id") == "current"){ //detection for current tab
         return       
        }
        else{             
        $("#content div").hide(); //Hide all content
        $("#tabs li").attr("id",""); //Reset id's
        $(this).parent().attr("id","current"); // Activate this
        $('#' + $(this).attr('name')).fadeIn(); // Show content for current tab
        }
    });
});
</script>

小さな問題があります。タブに id を使用したくありません。クラスで id を変更し、CSS を変更しました。スクリプトを変更しようとしましたが、うまくいきません:( ページには 3 つの異なるタブ グループがあるため、クラスに変更しています。新しいタブは次のとおりです。

<ul class="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 class="tabs_content"> 
<div id="tab1">...</div>
<div id="tab2">...</div>
<div id="tab3">...</div>
<div id="tab4">...</div>
</div>

jQueryを次のように変更しようとしました。

<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script>
$(document).ready(function() {
    $(".tabs_content div").hide(); // Initially hide all content
    $(".tabs li:first").attr("id","current"); // Activate first tab
    $(".tabs_content div:first").fadeIn(); // Show first tab content

    $('.tabs a').click(function(e) {
        e.preventDefault();
        if ($(this).closest("li").attr("id") == "current"){ //detection for current tab
         return       
        }
        else{             
        $(".tabs_content div").hide(); //Hide all content
        $(".tabs li").attr("id",""); //Reset id's
        $(this).parent().attr("id","current"); // Activate this
        $('#' + $(this).attr('name')).fadeIn(); // Show content for current tab
        }
    });
});
</script>

jQueryについて教えてください。または、同じページ内の複数のタブ テーブルのより良い例を教えてください。事前にサンクス

編集:1つのタブグループを使用すると、他のタブグループのコンテンツが非表示になるようになりました:)

これが CSS ファイルです。

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

    .tabs li{
      float: left;
      margin: 0 .5em 0 0;
    }

    .tabs a{
      position: relative;
      background: #ddd;
      background-image: linear-gradient(to bottom, #fff, #ddd);  
      padding: .7em 3.5em;
      float: left;
      text-decoration: none;
      color: #444;
      text-shadow: 0 1px 0 rgba(255,255,255,.8);
      border-radius: 5px 0 0 0;
      box-shadow: 0 2px 2px rgba(0,0,0,.4);
    }

    .tabs a:hover,
    .tabs a:hover::after,
    .tabs a:focus,
    .tabs a:focus::after{
      background: #fff;
    }

    .tabs a:focus{
      outline: 0;
    }

    .tabs a::after{
      content:'';
      position:absolute;
      z-index: 1;
      top: 0;
      right: -.5em;  
      bottom: 0;
      width: 1em;
      background: #ddd;
      background-image: linear-gradient(to bottom, #fff, #ddd);  
      box-shadow: 2px 2px 2px rgba(0,0,0,.4);
      transform: skew(10deg);
      border-radius: 0 5px 0 0;  
    }

    .tabs #current a,
    .tabs #current a::after{
      background: #fff;
      z-index: 3;
    }

    .tabs_content
    {
        background: #fff;
        padding: 2em;
        height: 220px;
        position: relative;
        z-index: 2; 
        border-radius: 0 5px 5px 5px;
        box-shadow: 0 -2px 3px -2px rgba(0, 0, 0, .5);
    }

My new settings are;

Script is;

    <script type="text/javascript" src="jquery-1.8.1.js"></script>

    <script>
    $(function(){
        //INIT IS NOT NECESSARY IF YOU FOLLOW MY CODE

    $("#tabs a").click(function(){
        //ADD ACTIVE CLASS
        $(this).parent().siblings().removeClass("current");
        $(this).parent().addClass("current");
        //SHOW CONTENT
        $(".content-holder").removeClass("current");
        var myIndex = $(this).parent().index(); // gets the index of the LI clicked
        $(".content-holder").eq(myIndex).fadeIn();
    });
    });
    </script>
HTML is;

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

        <div class="content"> 
        <div class="content-holder current" id="tab1">content1</div>
        <div class="content-holder" id="tab2">content2</div>
        <div class="content-holder" id="tab3">content3</div>
        <div class="content-holder" id="tab4">content4</div>
        </div>


and my css is;
.tabs{
  overflow: hidden;
  width: 100%;
  margin: 0;
  padding: 0;
  list-style: none;
}

.tabs li{
  float: left;
  margin: 0 .5em 0 0;
}

.tabs a{
  position: relative;
  background: #ddd;
  background-image: linear-gradient(to bottom, #fff, #ddd);  
  padding: .7em 3.5em;
  float: left;
  text-decoration: none;
  color: #444;
  text-shadow: 0 1px 0 rgba(255,255,255,.8);
  border-radius: 5px 0 0 0;
  box-shadow: 0 2px 2px rgba(0,0,0,.4);
}

.tabs a:hover,
.tabs a:hover::after,
.tabs a:focus,
.tabs a:focus::after{
  background: #fff;
}

.tabs a:focus{
  outline: 0;
}

.tabs a::after{
  content:'';
  position:absolute;
  z-index: 1;
  top: 0;
  right: -.5em;  
  bottom: 0;
  width: 1em;
  background: #ddd;
  background-image: linear-gradient(to bottom, #fff, #ddd);  
  box-shadow: 2px 2px 2px rgba(0,0,0,.4);
  transform: skew(10deg);
  border-radius: 0 5px 0 0;  
}

.tabs #current a,
.tabs #current a::after{
  background: #fff;
  z-index: 3;
}

.content
{
    background: #fff;
    padding: 2em;
    height: 220px;
    position: relative;
    z-index: 2; 
    border-radius: 0 5px 5px 5px;
    box-shadow: 0 -2px 3px -2px rgba(0, 0, 0, .5);
}

.content-holder {
    display:none;
}
.content-holder.current {
    display:block;
}
4

3 に答える 3

0

複数のタブセットを処理できるプラグインを設定します。

(function ($) {
    $.fn.tabset = function () {
        var $tabsets = $(this);
        $tabsets.each(function (i) {
            var $tabs = $('li.tab a', this);
            $tabs.click(function (e) {
                var $this = $(this);
                    panels = $.map($tabs, function (val, i) {
                        return $(val).attr('href');
                    });
                $(panels.join(',')).hide();
                $tabs.removeClass('selected');
                $this.addClass('selected').blur();
                $($this.attr('href')).show();
                e.preventDefault();
                return false;
            }).first().triggerHandler('click');
        });
      };
})(jQuery);

タブとコンテンツの両方を含むdivでhtmlをラップする必要があります。また、標準のハッシュタグを使用するようにアンカーを更新する必要があります。以下を参照してください。

<div class="tabset">
    <ul class="tabs">
        <li class="tab"><a href="#tab1">One</a></li>
        <li class="tab"><a href="#tab2">Two</a></li>
        <li class="tab"><a href="#tab3">Three</a></li>
        <li class="tab"><a href="#tab4">Four</a></li>    
    </ul>

    <div class="panel" id="tab1">...</div>
    <div class="panel" id="tab2">...</div>
    <div class="panel" id="tab3">...</div>
    <div class="panel" id="tab4">...</div>
</div>

あなたはそれをそのように呼ぶことができます:

$('div.tabset').tabset();

http://jsfiddle.net/rustyjeans/XVp5X/で、3つのタブセットを含む実際の例を見ることができます。

于 2012-09-05T16:30:44.213 に答える
0

IDを使用するのではなく、「現在」をクラスに変更することをお勧めします。

$(function(){
    //INIT IS NOT NECESSARY IF YOU FOLLOW MY CODE

    $("#tabs a").click(function(){
        //ADD ACTIVE CLASS
        $(this).parent().siblings().removeClass("current");
        $(this).parent().addClass("current");
        //SHOW CONTENT
        $(".content-holder").removeClass("current"):
        var myID = $(this).attr("name");
        $("#" + myID).fadeIn();
    });
});

最初にこのように HTML をセットアップすると、不要な JS 初期化を取り除くことができます

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

<div class="content"> 
    <div class="content-holder current" id="tab1">...</div>
    <div class="content-holder" id="tab2">...</div>
    <div class="content-holder" id="tab3">...</div>
    <div class="content-holder" id="tab4">...</div>
</div>

CSS を次のように設定します。

.content-holder {
    display:none;
}
.content-holder.current {
    display:block;
}

コンテンツ コンテナが常にナビゲーションと同じ順序に従う場合は、 $.index() を実行し、それを使用してアクティブを設定することもできます...例:

$("#tabs a").click(function(){
    //ADD ACTIVE CLASS
    $(this).parent().siblings().removeClass("current");
    $(this).parent().addClass("current");
    //SHOW CONTENT
    $(".content-holder").removeClass("current");
    var myIndex = $(this).parent().index(); // gets the index of the LI clicked
    $(".content-holder").eq(myIndex).fadeIn();
});
于 2012-09-05T16:00:12.487 に答える
0

レスキューのための jQuery UI: jqueryui.com/demos/tabs これらは、箱から出してすぐにネスト可能です。

この例を参照してください: http://jsbin.com/ubaq​​e found here .

[あなたは「クラスで id を変更し、次に CSS を変更した」と言っています。これらの変更を確認すると役に立ちます。「新しいタブ」を貼り付けた場所は、jQuery を省略したこと以外は何も変わっていないように見えます!]

[タブが 3 つしかないからといって、ID よりもクラスを使用する理由を説明することはできません。]

[コードをそのままにして、html から 4 番目のタブ<li><div>削除するだけで、既存の jQuery は、#content 内の div (省略記号がある場所) に配置したものを効果的に表示するはずです。]

于 2012-09-05T15:58:06.743 に答える