我唯一想做的就是点击一个按钮,而不是按钮内的文本改变,实际上我这样做了:
<button id='todo-button' onclick='changeToDone()'>To Do</button>
<script>
function changeToDone() {
let toDone = document.getElementById('todo-button');
toDone.innerText = 'Done';
}
我的问题是我想这样改变函数:
function changeToDone() {
let toDone = document.getElementById('todo-button');
let text = toDone.innerText;
text = 'Done';
,但它不起作用。我刚开始学习js,所以我想知道是否有办法实现我的第二个代码和如何。
不完全是。在
let text = toDone.innerText;
当您引用.innerText
时,将调用该元素的值getter,并返回该值。在此之后,将text
变量重新赋值给其他字符串将不会做任何事情。
要像这样更改元素的文本,您需要
(1)调用.innerText
setter
(2)具有要更改其文本的元素的this
那么,在执行
时toDone.innerText = 'Done';
所有这些部分-toDone
(this
),.innerText
(属性的名称)和右侧的=
(以便调用该属性的setter) -都是调用setter来更改文本的重要部分。
也就是说,可以将其抽象到函数后面,或者将对所有必要组件的引用保存在单个标识符后面,例如
const setText = text => toDone.innerText = text;
setText('Done');
但在合理的范围内,这是你所能做的。
这行不通。看看为什么可以推断出text
的值。
function changeToDone() {
let toDone = document.getElementById('todo-button');
let text = toDone.innerText;
text = 'Done';
在第3行中,文本设置为toDone.innerText
。toDone.innerText
返回一个字符串值。text
现在保存这个字符串值,而不是对innerText的引用。text
是当前在innerText中的字符串,而不是innerText本身。
现在在第4行,text
只是被分配了字符串'done'
的值。没有对innerText的引用,所以没有什么可以改变。
要实际设置内部文本,您必须使用toDone.innerText
的setter侧。因此,toDone.innerText = 'Done';
是必要的。