区别在于element.value是实时的,如果用户更改了比如文本框输入,它将反映出来,并显示新值。
而getAttribute('value')仍然显示原始的value="whateverWasHere"值。
input元素上执行Element.attributes操作,它基本上代表了描述该属性的任何信息的键/值对字符串,我看不到存储实际值的value属性(即包含该input所包含的实际值的属性)... 它给我一个NamedNodeMap对象,其中包含一些属性,但不包括保存实际值的value属性。然而,如果我执行像thatInput.value这样的操作,我当然可以看到该值。为什么value不在Element对象的attributes属性中? - Marius Mucenicuvalue="" 值?
如果没有在那里指定,它不会显示在列表中(我相信),这可能是为什么它没有显示的原因!但例如,如果我执行 document.querySelector('#test').attributes.value,我会看到一个空白的新输入文本框的 value=""。@MariusMucenicu - Mark Pieszak - Trilon.io.value不对应任何属性。
.defaultValue 对应 "value" 属性。所以当你使用 elem.getAttribute("value") 时,与 elem.defaultValue 相同。
另外,当输入框未被更改过(dirty value flag is false),.defaultValue 反映了 .value 的值。当用户更改输入框的值后,这个映射关系就会停止。当输入框未被更改时,你可以更改 .defaultValue 值(并因此更改 .setAttribute("value")),并看到它也更改了 .value 值。虽然这并不实用,但是仍然是一个有趣的小知识点。
.value和属性"value"不同,但是.defaultValue却相同。这就是为什么它有些不直观了。请参考 http://jsfiddle.net/J9Mat/2/ - Esailija