在IE 7中,如果链接是使用jQuery创建的,如何获取链接的href属性的文字值

In IE 7, how can you get the literal value of a link’s href attribute, if the link was created using jQuery?

本文关键字:链接 何获取 获取 文字 href 属性 创建 IE 如果 jQuery      更新时间:2023-09-26

如果你在HTML中有一个常规链接,你可以使用jQuery的attr函数获取其href属性的值:

<a id="testLink" href="test/link.html">Test Link</a>`
>>> $('#testLink').attr('href');
testLink.html

例:

  • http://jsfiddle.net/63RsQ/1/

但是,如果链接是使用 jQuery 创建的,那么在 IE 7 中,此函数返回浏览器在单击链接时将访问的绝对 URL(例如 https://stackoverflow.com/questions/ask/testLink.html),而不是 href 属性的文本值。

例:

  • http://jsfiddle.net/xtrEB/10/

我也尝试了thisthis.hrefthis.getAttribute('href'),它们都返回一个绝对的URL。

有没有办法获取 jQuery 在 IE 7 中创建的链接的 href 属性的文字值?

如果您以 jQuery 被迫使用.innerHTML的方式创建链接,它将无法正常工作,并记录在: http://api.jquery.com/html/(也 http://api.jquery.com/jQuery/#creating-new-elements):

此方法使用浏览器的 innerHTML 属性。某些浏览器可能会 不生成完全复制提供的 HTML 源代码的 DOM。 例如,版本 8 之前的 Internet Explorer 将转换所有 指向绝对 URL 的链接上的 href 属性,以及之前的 Internet Explorer 到版本 9 将无法正确处理 HTML5 元素,如果没有 添加单独的兼容层。

要修复它,请以不强制 jQuery 使用 .innerHTML 的方式创建链接:

$('#test').append( $("<a>", {href: "test/link.html", text: "Test Link"}));

http://jsfiddle.net/xtrEB/12/

我认为这

是不可能的,至少在IE7中是不可能的。JQuery 使用innerHTML,IE 似乎在渲染时将 href 属性重写为完全限定域名 (FQDN)(已知早期版本的 IE 会这样做)。因此,文本值在渲染时丢失。如果你知道路径,你可以尝试使用一些字符串eqation来找到它,从URL或其他东西中剥离域。或者如果可能的话,完全忘记IE<8。

也许这篇文章提供了一些启示

如果使用纯 JavaScript 和 DOM 方法来添加元素,即使在 IE7 中也可以检索文字值。看到这个 jsfiddle

试试这个:

$('a').click(function () {
    var hrf = this.href;
    alert('this.href: 'n' + hrf.slice(hrf.lastIndexOf('/')+1, hrf.length) );
    return false;
});

http://jsfiddle.net/xtrEB/5/