Неверное извлечение .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?
Ответы
Ответ 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');