Eu tenho algum código jQuery / JavaScript que quero executar apenas quando houver um #
link de âncora hash ( ) em uma URL. Como você pode verificar esse personagem usando JavaScript? Eu preciso de um teste simples que detecte URLs como estes:
example.com/page.html#anchor
example.com/page.html#anotheranchor
Basicamente, algo como:
if (thereIsAHashInTheUrl) {
do this;
} else {
do this;
}
Se alguém pudesse me apontar na direção certa, isso seria muito apreciado.
javascript
jquery
anchor
fragment-identifier
Philip Morton
fonte
fonte
.search
está disponível em um<a>
, não.query
. JQuery amostra:$("<a/>").attr({ "href": "http://www.somewhere.com/a/b/c.html?qs=1#fragmenttest" })[0]
..hash => "#fragmenttest"
e.search
=?qs=1
. A partir daí, acione a pergunta de extração da string de consulta para obter algo diferente de uma string.hashchange
evento e nãowindow.location.hash
. Embora este último não seja suportado pelo IE <8.fonte
Coloque o seguinte:
fonte
Se o URI não for o local do documento, esse trecho fará o que você deseja.
fonte
obj['0']
. Em JS, isso é verdade:arr[0] === arr['0']
Portanto, se o índice / chave não existir, o valor retornado será indefinido em vez de fora dos limites. jsfiddle.net/web5me/Mw376Você já tentou isso?
(Onde
url
está o URL que você deseja verificar, obviamente).fonte
Isto resolverá o problema ;)
fonte
retornará o identificador de hash
fonte
... ou há um seletor de jquery:
fonte
Aqui está o que você pode fazer para verificar periodicamente uma alteração de hash e, em seguida, chamar uma função para processar o valor do hash.
fonte
setTimeout(checkHash, 400)
. Além disso, navegadores modernos têm ohashchange
evento para que você possa fazer umwindow.addEventListener('hashchange', function(){ … })
. Finalmente, vazar ahash
variável global é outra prática não recomendada, mesmo que seja um exemplo.A maioria das pessoas conhece as propriedades da URL em document.location. Isso é ótimo se você estiver interessado apenas na página atual. Mas a pergunta era sobre ser capaz de analisar âncoras em uma página e não na própria página.
O que a maioria das pessoas parece perder é que essas mesmas propriedades de URL também estão disponíveis para ancorar elementos:
fonte
fonte
fonte
Os comentários de Partridge e Gareths acima são ótimos. Eles merecem uma resposta separada. Aparentemente, as propriedades hash e de pesquisa estão disponíveis em qualquer objeto Link html:
Ou
Se você precisar disso em uma variável de cadeia regular e tiver jQuery, isso deve funcionar:
(mas talvez seja um pouco exagerado ..)
fonte
Lançando isso aqui como um método para abstrair propriedades de localização de seqüências arbitrárias semelhantes a URI. Embora
window.location instanceof Location
seja verdade, qualquer tentativa de invocaçãoLocation
informará que é um construtor ilegal. Você ainda pode obter a coisas comohash
,query
,protocol
etc, definindo a seqüência de como ahref
propriedade de um elemento DOM âncora, que irá, em seguida, compartilhar todas as propriedades do endereço comwindow.location
.A maneira mais simples de fazer isso é:
Por conveniência, escrevi uma pequena biblioteca que utiliza isso para substituir o
Location
construtor nativo por outro que pega seqüências de caracteres e produzwindow.location
objetos semelhantes: Location.jsfonte
Normalmente, os cliques são os primeiros a mudar as localizações; portanto, depois de um clique, é uma boa ideia definir setTimeOut para atualizar window.location.hash
ou você pode ouvir a localização com:
Eu escrevi um plugin jQuery que faz algo parecido com o que você deseja fazer.
É um roteador de âncora simples.
fonte
Aqui está uma função simples que retorna
true
oufalse
(possui / não possui uma hashtag):Retorna
true
neste caso.Com base no comentário de @ jon-skeet.
fonte
Esta é uma maneira simples de testar isso para o URL da página atual:
fonte
às vezes, você obtém a string de consulta completa, como "#anchorlink? firstname = mark"
este é o meu script para obter o valor do hash:
fonte