javascript - "e.currentTarget.href"和 ".getAttribute(' href')"之间有什么区别?

标签 javascript html attributes href

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 的部分,这就是为什么结果比较是错误的。 但我想知道这是否是根据规范应该如此以及为什么。另外,我想知道其他属性是否会发生这种情况。

最佳答案

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

href of type DOMString
The absolute URI [IETF RFC 2396] of the linked resource.

<小时/>

区别在于一个是属性 ( <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/

相关文章:

javascript - 如何在 NodeJS 中使用 Web Speech API

javascript - 无法预先选择选择值

javascript - 只允许某些网站访问 PHP API

javascript - 为什么 html src 属性中是相对 url 因为 Javascript 函数中的完整路径

r - 什么是对象?

javascript - 将 JavaScript 变量传递给 html <select> 属性

ruby - 是否可以创建具有属性的哈希?

Javascript 移动对象对象中的所有数组元素

php - 如何在 DOM 和 PHP 中获取文本节点?

javascript - 在多个选择框 JQuery 上动态生成 URL