Javascript 从链接的href属性获取完整URI
我想确认一下这一点 我的目标是在从链接读取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)
我需要得到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');