30

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 中的一个错误?

4

7 回答 7

18

这当然不是jQuery 中的错误,而是浏览器的不一致实现.getAttribute('href')- 我建议仅.get(0).href出于一致性目的使用。

.get(0).getAttribute('href', 2)如果您不想要绝对 URI,似乎您可以访问 IE 和 Mozilla 中的属性文本。但是请注意,这在 Opera 中不起作用,我还没有在 Safari/Chrome/其他任何东西中进行测试。

您还可以去掉域或在“#”上拆分.get(0).href并使用数组的第二部分,假设它甚至包含“#”(检查.length)。

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

于 2009-10-20T08:31:53.000 回答
4

我相信它在所有 IE 7+ 中都是这样实现的。

我用:

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

希望能帮助到你!干杯。

于 2011-07-14T16:52:53.043 回答
2

我发现了一个与此问题相关的错误:http: //bugs.jquery.com/ticket/2747 jQuery 为 IE7 的“错误”实现了一种解决方法。然而,在 jQuery 1.7.1 中,这个错误被重新引入。我为 1.7.1 创建了一个新错误:http: //bugs.jquery.com/ticket/11129

于 2012-01-05T09:31:19.473 回答
1

我用:

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

当我需要最后一个“/”之后的一切时。

于 2010-04-21T08:48:39.457 回答
1

另一种方法是只使用数据属性,而不是 href

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

.

var href = $(this).attr('data-href');
于 2013-01-28T13:54:37.833 回答
0

我最终通过 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>
于 2012-03-27T05:34:37.570 回答
-1

问题是 IE7 和 IE8 也改变了文本。所以一个好的解决方法是这样做

$('#linkId').attr('href','newlink').text('oldtext');
于 2013-07-23T08:03:22.137 回答