<p>2 + 4 = <span onclick='this.document.getElementsByTagName("p").item(0).innerHTML = eval(2+4)'>답</span></p>
<p>4 * 20 + 64 = <span onclick='this.document.getElementsByTagName("p").item(1).innerHTML = eval(4*20+64)'>답</span></p>
<p>20 / 5 - 8 * 2 = <span onclick='this.document.getElementsByTagName("p").item(2).innerHTML = 20/5 - 8*2'>답</span></p>
我想点击"→"来输出数学表达式的答案,但是,不成功。
document
是一个 全球性的属性,而不是一个人的属性 span
元素。不要使用 this
.
a onclick
属性。this
代表(事件的)目标元素,所以它不是 window
但是,点击了 span
.
所以你可以做的只是 this.innerHTML = 2+4
,......等等。事实上,我更愿意使用 this.textContent
这里,因为你不打算注入HTML编码,而是纯文本。
另外:没有 eval
是需要的。
<p>2 + 4 = <span onclick='this.textContent = 2+4'>답</span></p>
<p>4 * 20 + 64 = <span onclick='this.textContent = 4*20+64'>답</span></p>
<p>20 / 5 - 8 * 2 = <span onclick='this.textContent = 20/5 - 8*2'>답</span></p>
为了让它更有活力,你 可以 使用 eval
,这样你就不需要重复这个公式了。
document.addEventListener("click", function(e) {
if (e.target.className == "calc") {
let formula = e.target.parentNode.textContent.split("=")[0];
e.target.textContent = eval(formula);
}
});
<p>2 + 4 = <span class="calc">답</span></p>
<p>4 * 20 + 64 = <span class="calc">답</span></p>
<p>20 / 5 - 8 * 2 = <span class="calc">답</span></p>
请注意,在这种情况下,JavaScript需要在... script
标签。
你只需要把关键字this从 this.documentdocument.getElementsByTagName
.
document
是一个全局变量,代表浏览器中加载的任何网页,并作为进入网页内容的入口,也就是该网页的 DOM树. A 跨越 是一个 Html元素 储存在DOM树中。
通过使用 this
关键字,你是想访问 span 的属性,而不是访问 document
变量。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>DOM 객체 변경 - 내용 변경</title>
</head>
<body>
<h1>계산해봅시다.</h1>
<hr>
<p>2 + 4 = <span onclick='document.getElementsByTagName("p").item(0).innerHTML = eval(2+4)'>답</span></p>
<p>4 * 20 + 64 = <span onclick='document.getElementsByTagName("p").item(1).innerHTML = eval(4*20+64)'>답</span></p>
<p>20 / 5 - 8 * 2 = <span onclick='document.getElementsByTagName("p").item(2).innerHTML = 20/5 - 8*2'>답</span></p>
</body>
</html>
而不是从 dom 树中获取各自的 dom 元素,你可以使用 span 属性,并且只需通过使用 内页 或 textContent 像这样。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>DOM 객체 변경 - 내용 변경</title>
</head>
<body>
<h1>계산해봅시다.</h1>
<hr>
<p>2 + 4 = <span onclick='this.innerHTML = eval(2+4)'>답</span></p>
<p>4 * 20 + 64 = <span onclick='this.innerHTML = eval(4*20+64)'>답</span></p>
<p>20 / 5 - 8 * 2 = <span onclick='this.innerHTML = 20/5 - 8*2'>답</span></p>
</body>
</html>
看看 此处 差异 innerHtml
和 textContent