Javascript 从链接的href属性获取完整URI

Javascript 从链接的href属性获取完整URI,javascript,hyperlink,Javascript,Hyperlink,我想确认一下这一点 我的目标是在从链接读取href属性时始终获得相同的字符串(在我的例子中是URI)。例如: 我需要得到http://domain.name/test.htm来自上述3种情况(或任何其他相同字符串) 在一些测试之后,my_a_dom_node.href似乎总是返回完整的限定URI,包括,这应该符合我的要求 jQuery有不同的行为,$(my_a_dom_node).attr('href')返回HTML中显示的内容(文本)。因此,我的技巧是使用$(my_a_dom_node)

我想确认一下这一点

我的目标是在从链接读取href属性时始终获得相同的字符串(在我的例子中是URI)。例如:

我需要得到
http://domain.name/test.htm
来自上述3种情况(或任何其他相同字符串)

在一些测试之后,
my_a_dom_node.href
似乎总是返回完整的限定URI,包括,这应该符合我的要求

jQuery有不同的行为,
$(my_a_dom_node).attr('href')
返回HTML中显示的内容(文本)。因此,我的技巧是使用
$(my_a_dom_node).get(0).href
获取完整的URI


问题是:我可以依赖这个吗?

您可以使用一点javascript重新组合完整的url:

function parseLink(link) {
    var baseUrl = location.href.substring(0,location.href.lastIndexOf('/'));
    if (link.indexOf('/') != -1) {
        link = link.substring(link.lastIndexOf('/')); 
    } else {
        link = "/"+ link;
    }
    var fullUrl = baseUrl + link;
    return fullUrl
}
是的,你可以信赖

有一次,当人们使用简单javascript(无jQuery)时,许多人的问题与您的问题相反,他们希望获得href属性中所写的真实url,而不是完整url,在这种情况下,他们通常只需执行以下操作:

my_a_dom_node.getAttribute('href', 2); //works both IE/FF
然后是jQuery,它帮助人们不要浪费时间去发现他们需要这样的代码,jQuery总是返回href属性中所写的真实url


有趣的是,现在有人问如何获取完整的url,因为jQuery会返回在href属性中写入的url。

是的,您可以信赖这一点

通过查看jQuery(1.4.2)源代码,我看到正在使用
jQuery.attr()
函数(压缩到相关部分):

因此它有效地调用
elem.getAttribute('href')
,返回实际属性值,而
href
属性按设计返回规范URL

但是,有一个对
jQuery.support.hrefNormalized
的引用,其中jQuery支持站点必须说明:

  • hrefNormalized
    :如果
    .getAttribute()
    方法检索到 元素的
    href
    属性 保持不变,而不是将其正常化 指向完全限定的URL。(是的 在IE中当前为false,URL为 标准化)。doml3规范

这基本上意味着jQuery可以自己发现浏览器行为,并相应地进行调整以提供一致的结果。

我知道这是一个老问题,但这实际上是第一个出现的条目,我相信添加一个额外的解决方案是好的。自从jQuery引入“prop”函数以来,获取完整URL就非常简单:

$(my_a_dom_node).prop('href');

我希望这仍然对某些人有帮助。

这真的适用于任何子文件夹和相对路径吗?从我的理解来看,情况并非如此。我想是的,baseUrl的事情非常简单。也许有人能证明我错了?顺便说一句:
$(我的dom_节点)。get(0)。href
==
$(我的dom_节点)[0]。href
是的,我在写问题时找到了你正在谈论的问题。谢谢您的回答。为什么您要提供第二个参数值
2
getAttribute
只有一个参数。@Noitidart:getAttribute有两个参数,第二个参数是可选的:哦,我明白了,谢谢。我想那只是一个问题。FF文档:@Noitidart:是的,它只是IE,但是Firefox不会发出错误。如果你提供第二个参数,它会忽略它。太好了,谢谢你的回答。我希望我能在这里给你两个接受的答案。我投了马可·德马约的票,因为他是第一个,而且基本上说的都一样。@Savagman:是的……我花了一段时间才看完源代码。。)
$(my_a_dom_node).prop('href');