var a = document.querySelector("a");
console.log( a.href == a.getAttribute("href") ); //why false? (tested on chrome)

<a href="#hello">Link</a>





为什么输出错误?我的意思是,我知道.href返回的是整个url,而.getAttribute()仅返回实际写在html上的部分,这就是为什么比较结果为false。但是我想知道这是否符合规范以及为什么。另外,我想知道这是否与其他任何属性一起发生。

最佳答案

该属性始终是完整URL的原因在specification中:


  href类型的DOMString
  链接资源的绝对URI [IETF RFC 2396]。




区别来自一个是属性(<a href="#hello">),另一个是属性(a.href)。属性等于标记中设置的任何值。该属性仅由属性初始化,但可以具有任何其他(“匹配”)值。设置属性会覆盖属性,但是再次设置属性会导致差异:



var a = document.querySelector('a');
a.href = a.href;
alert('Setting the property: ' + a.href + ' ' + a.getAttribute('href'));
a.setAttribute('href', '#goodbye');
alert('Setting the attribute: ' + a.href + ' ' + a.getAttribute('href'));

<a href="#hello">Link</a>





关于其他属性,例如,<link>元素的href属性/属性的行为方式相同:



alert(document.getElementById('lnk').href);

<link id="lnk" type="text/css" rel="stylesheet" href="some.css"></link>

关于javascript - 为什么e.currentTarget.href和.getAttribute(“href”)不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33208771/

10-12 00:20
查看更多