Неправильное извлечение .attr(“href”) в IE7 по сравнению со всеми другими браузерами?

StackOverflow https://stackoverflow.com/questions/1593174

Вопрос

Действительно ли это правда, что attr("href") команда для ссылки обрабатывается в IE7 совсем по-другому по сравнению со всеми другими браузерами?

Допустим, у меня есть страница по адресу http://example.com/page.html и у меня есть этот HTML:

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

и этот jQuery:

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

Тогда в IE7 значение strHref переменная будет "http://example.com/page.htm#someAnchor" но в других браузерах это будет "#someAnchor".

Я считаю, что последний упомянутый случай является наиболее правильным, так это просто случай, когда IE7 — плохой мальчик, или это ошибка в jQuery?

Это было полезно?

Решение

Это конечно нет ошибка в jQuery, но вместо этого в браузерах возникают противоречивые реализации .getAttribute('href') - Я предлагаю использовать просто .get(0).href для последовательности.

Похоже, вы можете получить доступ к тексту атрибута в IE и Mozilla, используя .get(0).getAttribute('href', 2) если вам не нужен абсолютный URI.Однако обратите внимание, что это не будет работать в Opera, и я не тестировал в Safari/Chrome/чем-либо еще.

Вы также можете удалить домен или разделить его на «#» для .get(0).href и используйте вторую часть массива, предполагая, что она даже содержит '#' (проверьте .length ).

http://www.glennjones.net/Post/809/getAttributehrefbug.htm

Другие советы

Я считаю, что это реализовано так во всех IE 7+.

Я использую:

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

Надеюсь, поможет!Ваше здоровье.

Я нашел ошибку, связанную с этой проблемой: http://bugs.jquery.com/ticket/2747 jQuery реализовал обходной путь для «ошибки» IE7.Однако в jQuery 1.7.1 эта ошибка снова появилась.Я создал новую ошибку для 1.7.1: http://bugs.jquery.com/ticket/11129

Я использую:

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

когда мне нужно все после последнего "/".

другой способ — просто использовать атрибут данных вместо href

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

.

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

В итоге я создал переменную через PHP, а затем с помощью метода javascript replace() удалил ее из 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>

Проблема в том, что IE7 и IE8 также меняют текст.Итак, хороший обходной путь - сделать вот так

$('#linkId').attr('href','newlink').text('oldtext');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top