我想在某些方面得到确认。
我的目标是在从链接读取href属性时始终获取相同的字符串(在我的情况下是URI)。例如:
带有base_url = http://domain.name/ 的 <a href="test.htm" />
带有base_url = http://domain.name/domain/
<a href="../test.htm" />
带有base_url的{p> <a href="http://domain.name/test.htm" />
=来自http://domain.name/
我需要从上面的3种情况中获得http://domain.name/test.htm
(或任何其他相同的字符串)。
经过一些测试后,似乎my_a_dom_node.href
始终返回完整限定的URI,包括http://domaine.name,这应该可以满足我的需要。
jQuery具有不同的行为,$(my_a_dom_node).attr('href')
返回HTML中显示的内容(文本)。所以我的诀窍是使用$(my_a_dom_node).get(0).href
来获取完整的URI。
问题是:我能依靠这个吗?
答案 0 :(得分:21)
是的,你可以信赖!
当人们使用简单的javascript(没有jQuery)时,很多人问你要求的相反,他们想要得到href属性中写的真实url而不是完整的url,在这种情况下他们习惯于做:
my_a_dom_node.getAttribute('href', 2); //works both IE/FF
然后是jQuery帮助人们不浪费时间发现他们需要这样的代码,jQuery总是返回href属性中写的真实url。
有趣的是,现在有人问如何获取完整的URL,因为jQuery返回了href属性中写的那个。
答案 1 :(得分:13)
我知道这是一个老问题,但实际上这是第一个出现的条目,我相信添加额外的解决方案是件好事。自从jQuery推出了&#34; prop&#34;功能,获取完整的URL就像:
$(my_a_dom_node).prop('href');
我希望这仍然有助于某人。
答案 2 :(得分:10)
是的,你可以依靠这个。
通过jQuery(1.4.2)源代码,我看到正在使用的jQuery.attr()
函数(浓缩到相关部分):
jQuery.extend({
// ...
attr: function( elem, name, value, pass ) {
// ...
var attr = !jQuery.support.hrefNormalized && notxml && special ?
// Some attributes require a special call on IE
elem.getAttribute( name, 2 ) :
elem.getAttribute( name );
// Non-existent attributes return null, we normalize to undefined
return attr === null ? undefined : attr;
}
});
因此它有效地调用elem.getAttribute('href')
返回实际属性值,而href
属性按设计返回规范URL。
但是,有一个jQuery.support.hrefNormalized
的引用,jQuery支持网站必须说:
hrefNormalized
:如果.getAttribute()
方法检索,则等于true 元素的href
属性 没有改变,而不是正常化 到完全限定的URL。 (它是 在IE中目前是假的,URL是 归一化)。 DOM l3规范
这基本上意味着jQuery自己发现浏览器行为并相应地进行调整以提供一致的结果。
答案 3 :(得分:1)
您可以使用一些javascript重构完整的网址:
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
}