Estou desenvolvendo uma página da Web na qual estou usando o Bootstrap Framework do Twitter e seu JS de Bootstrap Tabs . Funciona muito bem, exceto por alguns problemas menores, um dos quais é que eu não sei como ir diretamente para uma guia específica a partir de um link externo. Por exemplo:
<a href="facility.php#home">Home</a>
<a href="facility.php#notes">Notes</a>
deve ir para a guia Início e a guia Notas, respectivamente, quando clicadas nos links de uma página externa
javascript
html
tabs
twitter-bootstrap
mraliks
fonte
fonte
Respostas:
Aqui está a minha solução para o problema, talvez um pouco tarde. Mas talvez ajude outras pessoas:
fonte
window.scrollTo(0, 0);
para garantir que a janela sempre vá até o topoSyntax error, unrecognized expression: .nav-tabs a[href=#tab-2]
. Resolvido usando stackoverflow.com/questions/12131273/…ATUALIZAR
Para o Bootstrap 3, altere
.on('shown', ...)
para.on('shown.bs.tab', ....)
Isso é baseado na resposta @dubbe e esta resposta SO aceita . Ele lida com o problema
window.scrollTo(0,0)
sem funcionar corretamente. O problema é que, quando você substitui o hash do URL na guia mostrada, o navegador irá rolar para esse hash, já que é um elemento na página. Para contornar isso, adicione um prefixo para que o hash não faça referência a um elemento da página realExemplo de uso
Se você tiver um painel de tabulação com id = "mytab", precisará colocar seu link assim:
fonte
$('.nav-tabs a[href="'+hash.replace(prefix,"")+'"]').tab('show');
você pode acionar um
click
evento no link da guia correspondente:fonte
Esta é uma implementação aprimorada da solução do dubbe, que impede a rolagem.
fonte
Embora a solução JavaScript fornecida possa funcionar, eu segui uma maneira um pouco diferente que não requer JavaScript adicional, mas exige lógica na sua visão. Você cria um link com um parâmetro de URL padrão, como:
Então você simplesmente detecta o valor de activeTab para escrever 'class = "active"' no apropriado
<li>
Pseudocódigo (implemente de acordo com o seu idioma). Observe que eu configurei a guia 'home' como um padrão ativo se nenhum parâmetro for fornecido neste exemplo.
fonte
Eu não sou um grande fã de se ... mais; então, adotei uma abordagem mais simples.
Não endereça a rolagem para o hash solicitado; mas deveria ?
fonte
Para o Bootstrap 3:
https://jsfiddle.net/DTcHh/6638/
fonte
Isso funciona no Bootstrap 3 e aprimora as 2 principais respostas de dubbe e flynfish, integrando também a resposta do GarciaWebDev (que permite parâmetros de URL após o hash e é diretamente dos autores do Bootstrap no rastreador de problemas do github):
fonte
'shown'
deve estar de'shown.bs.tab'
acordo com os documentos: getbootstrap.com/javascript/#tabs-events . Estou confuso quanto ao porquê, mas quando eu tentei editar o seu post-it foi rejeitado ...Esse código seleciona a guia direita, dependendo do #hash, e adiciona o #hash direito quando uma guia é clicada. (isso usa jquery)
No Coffeescript:
ou em JS:
fonte
Aproveitando a solução do Demircan Celebi; Queria que a guia fosse aberta ao modificar o URL e a guia aberta sem precisar recarregar a página do servidor.
fonte
Este código de http://github.com/twitter/bootstrap/issues/2415#issuecomment-4450768 funcionou para mim perfeitamente.
fonte
Solução @flynfish + @Ztyx que eu uso para guias aninhadas:
as crianças devem ter class = "aninhado"
fonte
Eu vim com uma solução que usa o URL hash ou localStorage, dependendo da disponibilidade do último com o código abaixo:
fonte
Eu sugiro que você use o código fornecido pelos autores do Bootstrap no rastreador de problemas no GitHub :
Você pode encontrar no link do problema mais informações sobre por que eles não escolheram apoiar isso.
fonte
Tentei algumas maneiras discutidas acima e acabamos com a seguinte solução de trabalho, basta copiar e colar no seu editor para tentar. Para testar, basta alterar o hash para caixa de entrada, caixa de saída, redigir em url e pressionar a tecla Enter.
Espero que isso economize seu tempo.
fonte
Aqui está o que eu fiz, realmente simples, e desde que os links da sua guia tenham um ID associado a eles, você pode obter o atributo href e passar isso para a função que mostra o conteúdo da guia:
Em seu URL, você pode adicionar o hash da seguinte maneira: # tab_tab1, a parte 'tab_' é removida do próprio hash, para que o ID do link da guia real nas guias de navegação (tabid1) seja colocado depois disso, para que seu url seria algo como: www.mydomain.com/index.php#tab_tabid1.
Isso funciona perfeito para mim e espero que ajude outra pessoa :-)
fonte
Esta é a minha solução para lidar com guias aninhadas. Acabei de adicionar uma função para verificar se a guia ativa tem uma guia pai a ser ativada. Esta é a função:
E pode ser chamado assim (com base na solução do @ flynfish):
Esta solução funciona muito bem para mim no momento. Espero que isso possa ser útil para outra pessoa;)
fonte
Eu tive que modificar alguns bits para que isso funcionasse para mim. Estou usando o Bootstrap 3 e o jQuery 2
fonte
Basta inserir este código na sua página:
fonte
Acabei de ter esse problema, mas precisava lidar com vários níveis de guia. O código é bastante feio (veja os comentários), mas faz o seu trabalho: https://gist.github.com/JensRantil/4721860 Espero que alguém o ache útil (e fique à vontade para propor melhores soluções!).
fonte
Combinando partes de outras respostas, aqui está uma solução que pode abrir muitos níveis de guias aninhadas:
fonte
$('.nav-tabs li a').click( function(e) { history.pushState( null, null, $(this).attr('href') );});
no javascript acima do seu código.Se isso for importante para alguém, o código a seguir é pequeno e funciona perfeitamente, para obter um único valor de hash da URL e mostrar que:
o que ele faz é recuperar o ID e disparar o evento click. Simples.
fonte
Eu faço sth assim para links com ajax
#!#
(por exemplo, / test.com #! # Test3), mas você pode modificá-lo como quiserExemplo com página simples no Github aqui
fonte
Eu sei que este segmento é muito antigo, mas vou deixar aqui minha própria implementação:
Observe que estou usando um
nav-
prefixo de classe para navegar nos links.fonte