Подтвердить что ты не робот

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

Может ли быть правда, что команда 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?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Я использую:

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

Надеюсь, это поможет! Приветствия.

Ответ 3

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

Ответ 4

Я использую:

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

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

Ответ 5

Другой способ - просто использовать атрибут data вместо href

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

.

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

Ответ 6

В итоге я создал переменную через 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>

Ответ 7

Проблема в том, что IE7 и IE8 также меняют текст. Таким образом, хорошим решением является следующее:

$('#linkId').attr('href','newlink').text('oldtext');