Это связано с тем, как некоторые теги работают на основе их атрибутов, когда другие работают с текстом между открывающим и закрывающим тегами.
.value
извлекает любое значение, установленное для атрибута value
тег.innerHTML
извлекает все, что находится между открывающим и закрывающим тегом.
Например, если тег HTML был
<input type="text" value="Enter name here" id="user_name" />
и вы использовали JavaScript
var name = document.getElementById('user_name').value
объявил бы переменную name
и присвоил бы ей значение «Введите имя здесь» (при условии, что пользователь не изменил его).С другой стороны, если у вас есть HTML, такой как
<div id="abc">blah blah</div>
, тогда вы будете использовать
var text = document.getElementById('abc')
, и для переменной text
будет установлено значение "бла-бла".