metatags example card jquery tabs twitter-bootstrap

jquery - example - twitter card tags



La mejor manera de hacer que las pestaƱas de inicio de Twitter sean persistentes. (8)

Aquí hay otra forma de resolver el problema.

Primero agregue una línea al evento de clic para mostrar el hash en la barra de direcciones

$(''#myTab'').on(''click'', ''a'', function (e) { e.preventDefault(); // add this line window.location.hash = $(this).attr(''href''); $(this).tab(''show''); })

Luego, asegúrese de que la pestaña derecha esté activada al onload agregando esta parte a su llamada de documento listo.

if(window.location.hash){ $(''#myTab'').find(''a[href="''+window.location.hash+''"]'').tab(''show''); }

Todos juntos podéis escribir esto:

// cache the id var navbox = $(''#myTab''); // activate tab on click navbox.on(''click'', ''a'', function (e) { var $this = $(this); // prevent the Default behavior e.preventDefault(); // set the hash to the address bar window.location.hash = $this.attr(''href''); // activate the clicked tab $this.tab(''show''); }) // if we have a hash in the address bar if(window.location.hash){ // show right tab on load (read hash from address bar) navbox.find(''a[href="''+window.location.hash+''"]'').tab(''show''); }

¿Cuál es la mejor manera de hacer que estas pestañas persistan?

http://twitter.github.com/bootstrap/javascript.html#tabs

Para agregar algo de contexto, esto es para una aplicación de rieles. Estoy pasando una matriz [tab1, tab2] a mi vista, representando ambas pestañas y utilizando el complemento de la pestaña bootstrap para cambiar su visibilidad.


Ejecute el siguiente código después de cargar el DOM:

$(''a[data-toggle=tab]'').on(''click'', function () { history.pushState(null, null, $(this).attr(''href'')); }); if (window.location.hash) { $(''a[data-toggle=tab][href="'' + window.location.hash + ''"]'').tab(''show''); }

Sin embargo, esto lleva a una mala experiencia en la interfaz de usuario, ya que la pestaña activa se mostrará primero, y luego se cambiará a una pestaña desde location.hash


Este código selecciona la pestaña derecha según el #hash y agrega el #hash correcto cuando se hace clic en una pestaña. (esto usa jquery)

En 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)

o en 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); }); });


Otra versión modificada si no desea que se agreguen clics de pestañas al historial, pero tampoco desea que la página salte hacia arriba y hacia abajo:

$(document).ready(function () { if (location.hash !== '''') { $(''a[href="'' + location.hash + ''"]'').tab(''show''); } $("a[data-toggle=''tab'']").on("shown.bs.tab", function (e) { var hash = $(e.target).attr("href"); if (hash.substr(0,1) == "#") { var position = $(window).scrollTop(); location.replace("#" + hash.substr(1)); $(window).scrollTop(position); } }); });


Probado para Bootstrap 4, código minimalista (2 líneas) sin inserción de historial, que funciona en cualquier página con las pestañas de navegación.

<script type="text/javascript"> $(document).ready(function(){ // store the currently selected tab in the hash value $(''a[data-toggle="tab"]'').on(''shown.bs.tab'', function (e) { location.replace($(e.target).attr("href")); }); // switch to the currently selected tab when loading the page $(''.nav-tabs a[href="'' + window.location.hash + ''"]'').tab(''show''); }); </script>


Puede obtener el fragmento de la URL (que es la parte de la URL después de # ) en la carga usando window.location.hash , y específicamente establecer esa pestaña como visible:

if (window.location.hash) { $(window.location.hash).tab(''show'') }


Quería mejorar la mejor respuesta aquí ..

El crédito es para Sucrenoir, pero si desea evitar saltar en la página cuando cambia las pestañas, use este código mejorado:

$(document).ready(function() { // show active tab on reload if (location.hash !== '''') $(''a[href="'' + location.hash + ''"]'').tab(''show''); // remember the hash in the URL without jumping $(''a[data-toggle="tab"]'').on(''shown.bs.tab'', function(e) { if(history.pushState) { history.pushState(null, null, ''#''+$(e.target).attr(''href'').substr(1)); } else { location.hash = ''#''+$(e.target).attr(''href'').substr(1); } }); });


Quería mejorar las mejores dos respuestas aquí ... :)

El crédito va para Sucrenoir y D-Wade.

Debido a que en el código se usa la API de historial, no puede usar onchangehash ( https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onhashchange ). Este código agrega la funcionalidad del botón Atrás ( https://developer.mozilla.org/cs/docs/Web/API/WindowEventHandlers/onpopstate ).

// show active tab on reload if (location.hash !== '''') $(''a[href="'' + location.hash + ''"]'').tab(''show''); // remember the hash in the URL without jumping $(''a[data-toggle="tab"]'').on(''shown.bs.tab'', function(e) { if(history.pushState) { history.pushState(null, null, ''#''+$(e.target).attr(''href'').substr(1)); } else { location.hash = ''#''+$(e.target).attr(''href'').substr(1); } }); // remember to back button window.onpopstate = function(e) { $(''a[href="'' + location.hash + ''"]'').tab(''show''); };