แท็บ Bootstrap Twitter: ไปที่แท็บเฉพาะบนหน้าโหลดซ้ำหรือเชื่อมโยงหลายมิติ


358

ฉันกำลังพัฒนาหน้าเว็บที่ฉันใช้ทวิตเตอร์ของเงินทุนของพวกเขาและกรอบBootstrap แท็บ JS มันใช้งานได้ดีมากยกเว้นปัญหาเล็ก ๆ น้อย ๆ ซึ่งหนึ่งในนั้นคือฉันไม่รู้ว่าจะไปยังแท็บเฉพาะจากลิงก์ภายนอกได้อย่างไร ตัวอย่างเช่น:

<a href="facility.php#home">Home</a>
<a href="facility.php#notes">Notes</a>

ควรไปที่แท็บหน้าแรกและแท็บหมายเหตุตามลำดับเมื่อคลิกที่ลิงก์จากหน้าภายนอก


49
หวังว่าสิ่งนี้ถูกสร้างขึ้นใน!
เดมอน

5
คำถามนี้ยังได้รับการหยิบยกขึ้นมาที่นี่: github.com/twitter/bootstrap/issues/2415 (และมีวิธีแก้ไขปัญหาสองข้อที่นั่น)
Ztyx

สิ่งนี้ช่วยฉัน -> stackoverflow.com/questions/12131273/…
JGilmartin

1
ลิงก์ที่อัปเดตไปยังปัญหา bootstrap คือgithub.com/twbs/bootstrap/issues/2415
bmihelac

3
ปลั๊กอินที่แก้ไขปัญหานี้: github.com/timabell/jquery.stickytabs
Tim Abell

คำตอบ:


603

นี่คือวิธีแก้ไขปัญหาของฉันอาจจะสายไปสักหน่อย แต่อาจช่วยคนอื่นได้:

// Javascript to enable link to tab
var url = document.location.toString();
if (url.match('#')) {
    $('.nav-tabs a[href="#' + url.split('#')[1] + '"]').tab('show');
} 

// Change hash for page-reload
$('.nav-tabs a').on('shown.bs.tab', function (e) {
    window.location.hash = e.target.hash;
})

83
ฉันจะเพิ่ม 1 บรรทัดเพิ่มเติมwindow.scrollTo(0, 0);เพื่อให้แน่ใจว่าหน้าต่างเลื่อนไปด้านบนเสมอ
Trung Lê

1
$ ('. nav-tabs [href * = #' + url.split ('#') [1] + ']'). แท็บ ('แสดง'); // ด้วย * ปลอดภัยกว่าเพราะไม่เช่นนั้นมันจะตรงกับ # ... แรกเท่านั้น
mattangriffel

1
ออนไลน์ที่ใช้งานได้สำหรับฉัน: window.location.hash && $ ('li a [href = "' + window.location.hash + '"]'). แท็บ ('แสดง'). ทริกเกอร์ ("คลิก");
Dean Meehan

10
นี่เป็นตัวอย่างสำหรับเงินทุนที่ 3: bootply.com/render/VQqzOawoYc#tab2และรหัสที่มา
ซิม

2
หลังจาก jQuery อัพเกรด 1.11 จาก 1.09 Syntax error, unrecognized expression: .nav-tabs a[href=#tab-2]ฉันได้รับข้อผิดพลาดนี้: แก้ปัญหาโดยใช้stackoverflow.com/questions/12131273/…
Pietro Z.

213

UPDATE

สำหรับ Bootstrap 3 ให้เปลี่ยน.on('shown', ...)เป็น.on('shown.bs.tab', ....)


นี้จะตามออก@dubbeคำตอบและคำตอบที่ได้รับการยอมรับดังนั้น มันจัดการปัญหาด้วยwindow.scrollTo(0,0)การทำงานไม่ถูกต้อง ปัญหาคือเมื่อคุณแทนที่ urash hash บนแท็บที่แสดงเบราว์เซอร์จะเลื่อนไปที่ hash นั้นตั้งแต่อิลิเมนต์บนหน้า ในการหลีกเลี่ยงปัญหานี้ให้เพิ่มส่วนนำหน้าเพื่อให้แฮชไม่ได้อ้างอิงองค์ประกอบของหน้าจริง

// Javascript to enable link to tab
var hash = document.location.hash;
var prefix = "tab_";
if (hash) {
    $('.nav-tabs a[href="'+hash.replace(prefix,"")+'"]').tab('show');
} 

// Change hash for page-reload
$('.nav-tabs a').on('shown', function (e) {
    window.location.hash = e.target.hash.replace("#", "#" + prefix);
});

ตัวอย่างการใช้งาน

หากคุณมี tab-บานหน้าต่างพร้อม id = "mytab" คุณต้องใส่ลิงค์ดังนี้:

<a href="yoursite.com/#tab_mytab">Go to Specific Tab </a>

1
มีวิธีง่ายๆในการอ้างอิงบุ๊คมาร์คที่อยู่ภายใต้แท็บเฉพาะหรือไม่ ฉันมีห้าแท็บบนหน้าของฉันและฉันมีบุ๊กมาร์กจำนวนหนึ่ง สิ่งที่ฉันต้องการคือทำให้บุ๊คมาร์คเหล่านี้เชื่อมโยงได้จากด้านนอกแท็บ
nize

@nize ถ้าคุณสร้าง jsfiddle ด้วยสิ่งที่คุณพยายามจะทำฉันจะลองดู
flynfish

1
นี่คือการสาธิต Bootlpy สำหรับเงินทุนที่ 3: bootply.com/render/VQqzOawoYc#tab2และรหัสที่มา
ซิม

ตัวอย่างด้านบนไม่มีเครื่องหมายคำพูดคู่บน href บรรทัดที่ 5 ควรเป็น:$('.nav-tabs a[href="'+hash.replace(prefix,"")+'"]').tab('show');
Ponyboy

ใช้งานได้สำหรับฉันยกเว้นว่าฉันต้องลบเครื่องหมายสแลชสุดท้าย (ก่อนหน้า #) ใน 'yoursite.com/anotherpage/#tab_mytab' มิฉะนั้นจะเล่นได้อย่างเสียหายด้วยการโหลดหน้าเว็บ
Alexander

52

คุณสามารถเรียกใช้clickเหตุการณ์บนลิงก์แท็บที่เกี่ยวข้อง:

$(document).ready(function(){

  if(window.location.hash != "") {
      $('a[href="' + window.location.hash + '"]').click()
  }

});

ขอบคุณสำหรับทิป! สิ่งนี้ใช้ได้ดีกับปัญหาเล็ก ๆ กำลังรีเฟรชหน้าจะไม่นำไปที่แท็บที่ถูกต้อง กดปุ่ม Ctrl + F5 จะ ฉันแก้ไขโค้ดดังต่อไปนี้: `$ (เอกสาร). ready (function () {function getUrlVars () {var vars = {}; var parts = window.location.href.replace (/ [? &] + ([ ^ = &] +) = ([^ &] *) / gi, ฟังก์ชั่น (m, key, value) {vars [key] = value;}); return vars;} var action = getUrlVars () ["action" ]; if (action! = "") {$ ('a [href = "#' + action + '"]'). คลิก ()};}); `
mraliks

44

นี่คือการปรับปรุงการใช้งานโซลูชันของ dubbe ซึ่งป้องกันการเลื่อน

// Javascript to enable link to tab
var url = document.location.toString();
if (url.match('#')) {
    $('.nav-tabs a[href="#'+url.split('#')[1]+'"]').tab('show') ;
} 

// With HTML5 history API, we can easily prevent scrolling!
$('.nav-tabs a').on('shown.bs.tab', function (e) {
    if(history.pushState) {
        history.pushState(null, null, e.target.hash); 
    } else {
        window.location.hash = e.target.hash; //Polyfill for old browsers
    }
})

21

ในขณะที่โซลูชัน JavaScript ที่ให้มาอาจใช้งานได้ฉันใช้วิธีที่แตกต่างกันเล็กน้อยซึ่งไม่ต้องการ JavaScript เพิ่มเติม แต่ต้องใช้ตรรกะในมุมมองของคุณ คุณสร้างลิงค์ด้วยพารามิเตอร์ URL มาตรฐานเช่น:

<a href = "http://link.to.yourpage?activeTab=home">My Link</a>

จากนั้นคุณก็ตรวจสอบค่าของ activeTab เพื่อเขียน 'class = "active"' ในความเหมาะสม <li>

Pseudocode (ปรับใช้ตามภาษาของคุณ) หมายเหตุฉันได้ตั้งค่าแท็บ 'บ้าน' เป็นค่าเริ่มต้นที่ใช้งานหากไม่มีพารามิเตอร์ที่ระบุไว้ในตัวอย่างนี้

$activetabhome = (params.activeTab is null or params.activeTab == 'home') ? 'class="active"' : '';
$activetabprofile = (params.activeTab == 'profile') ? 'class="active"' : '';

<li $activetabhome><a href="#home">Home</a></li>
<li $activetabprofile><a href="#profile">Profile</a></li>

ฉันชอบโซลูชันของคุณกับโซลูชัน JS เนื่องจากเหตุผลง่ายๆอย่างหนึ่งคือ JS location.hash จะข้ามไปที่ ID ซึ่งทำให้ตำแหน่งของเคอร์เซอร์เลื่อนขึ้นและลง
Trung Lê

ฉันชอบวิธีนี้ อันที่จริงฉันสร้างเส้นทางใหม่สำหรับแท็บและมุมมองที่สร้างขึ้นใหม่โดยการตั้งค่าคลาสที่ใช้งานตาม วิธีนี้จะช่วยลดอาการปวดหัวของการปรับขนาดหน้า url hash และการเลื่อนหน้าเว็บเข้าด้วยกัน
วีเจย์มีนา

10

ฉันไม่ใช่แฟนตัวยงของถ้า ... อย่างอื่น; ดังนั้นฉันจึงใช้วิธีที่ง่ายกว่า

$(document).ready(function(event) {
    $('ul.nav.nav-tabs a:first').tab('show'); // Select first tab
    $('ul.nav.nav-tabs a[href="'+ window.location.hash+ '"]').tab('show'); // Select tab by name if provided in location hash
    $('ul.nav.nav-tabs a[data-toggle="tab"]').on('shown', function (event) {    // Update the location hash to current tab
        window.location.hash= event.target.hash;
    })
});
  1. เลือกแท็บเริ่มต้น (โดยปกติจะเป็นแท็บแรก)
  2. สลับไปที่แท็บ (หากองค์ประกอบดังกล่าวมีอยู่จริงให้ jQuery จัดการมัน); ไม่มีอะไรเกิดขึ้นถ้ามีการระบุแฮชที่ผิด
  3. [ไม่บังคับ] อัปเดตแฮชหากเลือกแท็บอื่นด้วยตนเอง

ไม่เน้นการเลื่อนไปที่แฮชที่ร้องขอ แต่ควรจะได้หรือไม่



8

วิธีนี้ใช้ได้ใน Bootstrap 3 และปรับปรุงคำตอบที่ดีที่สุดของ dubbe และ flynfish โดยการรวมคำตอบของ GarciaWebDev ด้วย (ซึ่งอนุญาตให้พารามิเตอร์ url หลังแฮชและตรงจากผู้เขียน Bootstrap ในตัวติดตามปัญหา GitHub):

// Javascript to enable link to tab
var hash = document.location.hash;
var prefix = "tab_";

if (hash) {
    hash = hash.replace(prefix,'');
    var hashPieces = hash.split('?');
    activeTab = $('.nav-tabs a[href=' + hashPieces[0] + ']');
    activeTab && activeTab.tab('show');
} 

// Change hash for page-reload
$('.nav-tabs a').on('shown', function (e) {
    window.location.hash = e.target.hash.replace("#", "#" + prefix);
});

1
นี้ไม่ได้ทำงานใน Bootstrap 3 'shown'ควรจะ'shown.bs.tab'ต่อเอกสาร: getbootstrap.com/javascript/#tabs-events ฉันงงว่าทำไม แต่เมื่อฉันพยายามแก้ไขโพสต์ของคุณมันถูกปฏิเสธ ...
YPCrumble

6

รหัสนี้เลือกแท็บที่ถูกต้องขึ้นอยู่กับ #hash และเพิ่ม #hash ที่ถูกต้องเมื่อคลิกที่แท็บ (ใช้ jquery)

ใน Coffeescript:

$(document).ready ->
    if location.hash != ''
        $('a[href="'+location.hash+'"]').tab('show')

    $('a[data-toggle="tab"]').on 'shown', (e) ->
        location.hash = $(e.target).attr('href').substr(1)

หรือใน JS:

$(document).ready(function() {
    if (location.hash !== '') $('a[href="' + location.hash + '"]').tab('show');
    return $('a[data-toggle="tab"]').on('shown', function(e) {
      return location.hash = $(e.target).attr('href').substr(1);
    });
});

ตรวจสอบให้แน่ใจว่าได้วางสิ่งนี้หลังจากโหลด jquery แล้ว ฉันวางไว้ตรงกลางของหน้า (มันเป็นที่ที่ง่ายต่อการแทรกสำหรับการทดสอบ) และมันไม่ทำงาน วางไว้หลังจากที่ฉันโหลด jquery ใช้งานได้ดี
Ron

6

การสร้างทางออกของ Demircan Celebi; ฉันต้องการให้แท็บเปิดเมื่อแก้ไข URL และเปิดแท็บโดยไม่ต้องโหลดหน้าเว็บจากเซิร์ฟเวอร์

<script type="text/javascript">
    $(function() {
        openTabHash(); // for the initial page load
        window.addEventListener("hashchange", openTabHash, false); // for later changes to url
    });


    function openTabHash()
    {
        console.log('openTabHash');
        // Javascript to enable link to tab
        var url = document.location.toString();
        if (url.match('#')) {
            $('.nav-tabs a[href="#'+url.split('#')[1]+'"]').tab('show') ;
        } 

        // With HTML5 history API, we can easily prevent scrolling!
        $('.nav-tabs a').on('shown.bs.tab', function (e) {
            if(history.pushState) {
                history.pushState(null, null, e.target.hash); 
            } else {
                window.location.hash = e.target.hash; //Polyfill for old browsers
            }
        })
    }
</script>


5

@flynfish + @Ztyx โซลูชันที่ฉันใช้สำหรับแท็บที่ซ้อนกัน:

    handleTabLinks();

    function handleTabLinks() {
        if(window.location.hash == '') {
            window.location.hash = window.location.hash + '#_';
        }
        var hash = window.location.hash.split('#')[1];
        var prefix = '_';
        var hpieces = hash.split('/');
        for (var i=0;i<hpieces.length;i++) {
            var domelid = hpieces[i].replace(prefix,'');
            var domitem = $('a[href=#' + domelid + '][data-toggle=tab]');
            if (domitem.length > 0) {
                domitem.tab('show');
            }
        }
        $('a[data-toggle=tab]').on('shown', function (e) {
            if ($(this).hasClass('nested')) {
                var nested = window.location.hash.split('/');
                window.location.hash = nested[0] + '/' + e.target.hash.split('#')[1];
            } else {
                window.location.hash = e.target.hash.replace('#', '#' + prefix);
            }
        });
    }

เด็กควรมี class = "ซ้อนกัน"


5

ฉันมากับวิธีแก้ปัญหาที่ใช้แฮ url หรือ localStorage ขึ้นอยู่กับความพร้อมของหลังด้วยรหัสด้านล่าง:

$(function(){
    $(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
        localStorage.setItem('activeTab', $(e.target).attr('href'));
    })

    var hash = window.location.hash;
    var activeTab = localStorage.getItem('activeTab');

    if(hash){
          $('#project-tabs  a[href="' + hash + '"]').tab('show');   
    }else if (activeTab){
        $('#project-tabs a[href="' + activeTab + '"]').tab('show');
    }
});

4

ฉันขอแนะนำให้คุณใช้รหัสที่ผู้เขียน Bootstrap ใช้ในการติดตามปัญหาของพวกเขาใน GitHub :

var hash = location.hash
  , hashPieces = hash.split('?')
  , activeTab = $('[href=' + hashPieces[0] + ']');
activeTab && activeTab.tab('show');

คุณสามารถค้นหาลิงก์ไปยังปัญหาข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่พวกเขาไม่เลือกที่จะสนับสนุน


4

ลองหลายวิธีที่กล่าวถึงข้างต้นและจบลงด้วยวิธีแก้ไขปัญหาการทำงานต่อไปเพียงแค่คัดลอกและวางในเครื่องมือแก้ไขของคุณเพื่อลอง หากต้องการทดสอบเพียงเปลี่ยนแฮชเป็นกล่องจดหมายออกกล่องจดหมายเขียน URL และกดปุ่ม Enter

<html>
    <head>
        <link type='text/css' rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css' />
        <script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
    </head>
    <body>
        <div class="container body-content">
            <ul class="nav nav-tabs">
                <li class="active"><a data-toggle="tab" href="#inbox">Inbox</a></li>
                <li><a data-toggle="tab" href="#outbox">Outbox</a></li>
                <li><a data-toggle="tab" href="#compose">Compose</a></li>
            </ul>
            <div class="tab-content">
                <div id="inbox" class="tab-pane fade in active">
                    Inbox Content
                </div>
                <div id="outbox" class="tab-pane fade">
                    Outbox Content
                </div>
                <div id="compose" class="tab-pane fade">
                    Compose Content
                </div>
            </div>
        </div>
        <script>
            $(function () {
                var hash = window.location.hash;
                hash && $('ul.nav a[href="' + hash + '"]').tab('show');
            });
        </script>
    </body>
</html>

หวังว่านี่จะช่วยประหยัดเวลาของคุณ


3

นี่คือสิ่งที่ฉันทำง่ายมาก ๆ และหากลิงก์แท็บของคุณมี ID ที่เกี่ยวข้องคุณสามารถรับแอตทริบิวต์ href และส่งผ่านไปยังฟังก์ชันที่แสดงเนื้อหาของแท็บได้:

<script type="text/javascript">
        jQuery(document).ready(function() {
            var hash = document.location.hash;
            var prefix = "tab_";
            if (hash) {
                var tab = jQuery(hash.replace(prefix,"")).attr('href');
                jQuery('.nav-tabs a[href='+tab+']').tab('show');
            }
        });
        </script>

จากนั้นใน url ของคุณคุณสามารถเพิ่มแฮชได้ตามต้องการ: # tab_tab1 ส่วน 'tab_' จะถูกลบออกจากแฮชตัวเองดังนั้น ID ของลิงก์แท็บจริงในแท็บ nav (tabid1) จึงเป็นของคุณ URL จะมีลักษณะดังนี้: www.mydomain.com/index.php#tab_tabid1

มันใช้งานได้ดีสำหรับฉันและหวังว่าจะช่วยคนอื่นได้ :-)


2

นี่เป็นวิธีแก้ปัญหาของฉันในการจัดการแท็บที่ซ้อนกัน ฉันเพิ่งเพิ่มฟังก์ชั่นเพื่อตรวจสอบว่าแท็บที่ใช้งานอยู่มีแท็บพาเรนต์ที่จะเปิดใช้งานหรือไม่ นี่คือฟังก์ชั่น:

function activateParentTab(tab) {
    $('.tab-pane').each(function() {
        var cur_tab = $(this);
        if ( $(this).find('#' + tab).length > 0 ) {
            $('.nav-tabs a[href=#'+ cur_tab.attr('id') +']').tab('show');
            return false;
        }
    });
}

และสามารถถูกเรียกเช่นนี้ (ขึ้นอยู่กับวิธีการแก้ปัญหาของ @ flynfish):

var hash = document.location.hash;
var prefix = "";
if (hash) {
    $('.nav-tabs a[href='+hash.replace(prefix,"")+']').tab('show');
    activateParentTab(hash);
} 

// Change hash for page-reload
$('.nav-tabs a').on('shown', function (e) {
    window.location.hash = e.target.hash.replace("#", "#" + prefix);
});

โซลูชันนี้ใช้งานได้ดีกับฉันในขณะนี้ หวังว่าสิ่งนี้จะเป็นประโยชน์สำหรับคนอื่น;)


2

ฉันต้องแก้ไขบิตนี้เพื่อให้เหมาะกับฉัน ฉันใช้ Bootstrap 3 และ jQuery 2

// Javascript to enable link to tab
var hash = document.location.hash;
var prefix = "!";
if (hash) {
    hash = hash.replace(prefix,'');
    var hashPieces = hash.split('?');
    activeTab = $('[role="tablist"] a[href=' + hashPieces[0] + ']');
    activeTab && activeTab.tab('show');
}

// Change hash for page-reload
$('[role="tablist"] a').on('shown.bs.tab', function (e) {
    window.location.hash = e.target.hash.replace("#", "#" + prefix);
});

คำตอบที่ดียกเว้นฉันต้องแทนที่ "!" คำนำหน้าด้วย "tab_" มิฉะนั้นทำงานอย่างสมบูรณ์
koziez

2

เพียงแค่ใส่รหัสนี้ในหน้าของคุณ:

$(function(){
  var hash = window.location.hash;
  hash && $('ul.nav a[href="' + hash + '"]').tab('show');

  $('.nav-tabs a').click(function (e) {
    $(this).tab('show');
    var scrollmem = $('body').scrollTop();
    window.location.hash = this.hash;
    $('html,body').scrollTop(scrollmem);
  });
});


1

ฉันเพิ่งมีปัญหานี้ แต่จำเป็นต้องจัดการกับแท็บหลายระดับ รหัสค่อนข้างน่าเกลียด (ดูความคิดเห็น) แต่ทำงาน: https://gist.github.com/JensRantil/4721860หวังว่าคนอื่นจะพบว่ามีประโยชน์ (และอย่าลังเลที่จะเสนอทางออกที่ดีกว่า!)


1

การรวม peices จากคำตอบอื่น ๆ นี่คือวิธีแก้ปัญหาที่สามารถเปิดแท็บที่ซ้อนกันหลายระดับ:

// opens all tabs down to the specified tab
var hash = location.hash.split('?')[0];
if(hash) {
  var $link = $('[href=' + hash + ']');
  var parents = $link.parents('.tab-pane').get();
  $(parents.reverse()).each(function() {
    $('[href=#' + this.id + ']').tab('show') ;
  });
  $link.tab('show');
}

ทำงานกับการซ้อน 2 ระดับเท่านั้นระดับที่ 3 ทำให้เกิดปัญหา
Nicholas Hamilton

ฉันเพิ่งทดสอบสิ่งนี้กับแท็บสามระดับและดูเหมือนว่าใช้งานได้สำหรับฉัน คุณแน่ใจหรือว่านี่ไม่ใช่ปัญหาของการติดตั้งใช้งานของคุณ? คุณกำลังประสบปัญหาอะไร
cweston

แท็บใดก็ได้ในระดับ 1 และระดับ 2 จะทำงานได้ดีอย่างไรก็ตามในระดับ 3 เมื่อรีเฟรชหน้าเว็บ (หรือส่งแบบฟอร์ม) เมื่อหน้านั้นเปิดขึ้นอีกครั้งหน้านั้นจะถูกโฟกัสที่แท็บแรกของระดับที่ 2
Nicholas Hamilton

เพื่อให้มันทำงาน ok (มีการพิมพ์ผิดเล็กน้อยในรหัสของฉัน) แต่หลังจากการแก้ไขการพิมพ์ผิดเฉพาะ$('.nav-tabs li a').click( function(e) { history.pushState( null, null, $(this).attr('href') );});ใน javascript เหนือรหัสของคุณ
นิโคลัสแฮมิลตัน

1

หากเป็นเรื่องสำคัญสำหรับทุกคนรหัสต่อไปนี้มีขนาดเล็กและทำงานได้อย่างไร้ที่ติเพื่อรับค่าแฮชเพียงครั้งเดียวจาก URL และแสดงว่า:

<script>
    window.onload = function () {
        let url = document.location.toString();
        let splitHash = url.split("#");
        document.getElementById(splitHash[1]).click();
    };
</script>

มันทำอะไรดึง ID และ fires เหตุการณ์คลิก ง่าย


0

ฉันทำ sth เช่นนี้สำหรับลิงก์กับ ajax #!#(เช่น / test.com #! # test3) แต่คุณสามารถแก้ไขได้ตามที่คุณต้องการ

$(document).ready(function() {

       let hash = document.location.hash;
       let prefix = "!#";

       //change hash url on page reload
       if (hash) {
         $('.nav-tabs a[href=\"'+hash.replace(prefix,"")+'\"]').tab('show');
       } 

       // change hash url on switch tab
       $('.nav-tabs a').on('shown.bs.tab', function (e) {
          window.location.hash = e.target.hash.replace("#", "#" + prefix);
       });
 });

ตัวอย่างที่มีหน้าแบบง่าย ๆบน Github ที่นี่


0

ฉันรู้ว่าหัวข้อนี้เก่ามาก แต่ฉันจะออกจากที่นี่ไปใช้เอง:

$(function () {
  // some initialization code

  addTabBehavior()
})

// Initialize events and change tab on first page load.
function addTabBehavior() {
  $('.nav-tabs a').on('show.bs.tab', e => {
    window.location.hash = e.target.hash.replace('nav-', '')
  })

  $(window).on('popstate', e => {
    changeTab()
  })

  changeTab()
}

// Change the current tab and URL hash; if don't have any hash
// in URL, so activate the first tab and update the URL hash.
function changeTab() {
  const hash = getUrlHash()

  if (hash) {
    $(`.nav-tabs a[href="#nav-${hash}"]`).tab('show')
  } else {
    $('.nav-tabs a').first().tab('show')
  }
}

// Get the hash from URL. Ex: www.example.com/#tab1
function getUrlHash() {
  return window.location.hash.slice(1)
}

โปรดทราบว่าฉันใช้nav-คำนำหน้าชั้นเพื่อนำทางลิงค์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.