与所有其他浏览器相比,IE7 中的 .attr(“href”) 提取错误?
-
22-09-2019 - |
题
难道真的是这样吗? 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
一致性
好像你可以使用.get(0).getAttribute('href', 2)
访问IE和Mozilla的属性文字,如果你不想要的绝对URI。不过请注意在Opera这是不行的,我还没有在Safari /铬/别的测试。
您也可以去掉上“#”域或分裂为.get(0).href
和使用该阵列的第二部分假设它甚至包含“#”(检查.length
)。
其他提示
我相信这是像在所有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这个bug被重新提出。 我创建了一个新的错误为1.7.1: http://bugs.jquery.com/ticket/11129一>
使用:
var hrefArr = $(this).attr('href').split('/');
var id = hrefArr[hrefArr.length-1];
当我需要最后的“/".
另一种方法是只使用 data 属性,而不是 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');