Pergunta

Pode ser verdade que o attr("href") comando para um link é um tratamento muito diferente no IE7, em comparação a todos os outros navegadores?

Vamos dizer que eu tenho uma página no http://example.com/page.html e eu tenho essa HTML:

<a href="#someAnchor" class="lnkTest">Link text</a>

e jQuery:

var strHref = $(".lnkTest").attr("href");

Em seguida, no IE7 o valor da strHref variável será "http://example.com/page.htm#someAnchor" mas em outros navegadores, ele vai ser "#someAnchor".

Eu acredito que o último mencionado caso é o mais correto, então, é apenas um caso de IE7 ser um bad boy ou é um bug do jQuery?

Foi útil?

Solução

É certamente não um bug no jQuery, mas em vez de navegar as implementações inconsistentes de .getAttribute('href') - Eu sugiro usar apenas .get(0).href para consistência.

Parece que você pode acessar o texto do atributo no IE e Mozilla usando .get(0).getAttribute('href', 2) Se você não quer o URI absoluto. Observe, no entanto, isso não funcionará na Opera e eu não testei no Safari/Chrome/mais nada.

Você também pode retirar o domínio ou se dividir em '#' para .get(0).href e use a segunda parte da matriz, assumindo que ela contém '#' (check .length ).

http://www.glennjones.net/post/809/getattributehrefbug.htm

Outras dicas

Eu acredito que é implementado assim em todo o IE 7+.

Eu uso:

var href=jQuery('#foo').attr('href');
href=href.substring(href.indexOf('#'));

Espero que ajude! Felicidades.

Encontrei um bug relacionado a este problema: http://bugs.jquery.com/ticket/2747 JQuery implementou uma solução alternativa para o 'bug' do IE7. No entanto, no jQuery 1.7.1, esse bug foi reintroduzido. Eu criei um novo bug para 1.7.1: http://bugs.jquery.com/ticket/11129

Eu uso:

var hrefArr = $(this).attr('href').split('/');
var id = hrefArr[hrefArr.length-1];

Quando eu preciso de tudo depois do último "/".

Outra maneira é apenas usar um atributo de dados, em vez de href

<a data-href="#anchor-0">example</a>

.

var href = $(this).attr('data-href');

Acabei criando uma variável através do PHP, em seguida, usando javascript() substituir o método de tira-lo para fora do href:

<script>var domain = 'http://<?=$_SERVER['HTTP_HOST']?>';</script>

<script>
$(function(){
/* prevent default action of all anchors with hash class */
$('#canvas').on('click', 'a.hash', function(event) {
    event.preventDefault();
            // get the href of the anchor
    var hash = '!' + $(this).attr('href');
            // remove the absolute url if it exists
    hash = hash.replace( domain, '' );
    // redirect
            window.location.hash = hash;
});
});
</script>

O problema é que o IE7 e o IE8 mudam também o texto. Então, uma boa solução alternativa é fazer assim

$('#linkId').attr('href','newlink').text('oldtext');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top