gpt4 book ai didi

javascript - 使 html 类的所有元素对单击使用react,这将修改元素本身

转载 作者:行者123 更新时间:2023-12-01 03:55:33 24 4
gpt4 key购买 nike

我正在尝试为我的学生编写一个教程,以网页的形式编写,其中包含隐藏的“剧透”,学生可以在考虑答案后取消隐藏。所以,长话短说,我正在寻找的行为是:

  • 一开始,文本中出现了很多隐藏的单词;
  • 当点击一段文本时,它就会出现,并且之后不会被覆盖;
  • 这应该以最小的开销(不强制我安装复杂的框架)并且在我所有学生的机器上工作,即使浏览器已经过时,即使没有安装 jquery。

我搜索了现成的解决方案,但我检查的所有解决方案要么太复杂,要么不完全符合我的要求。所以我决定自己做。到目前为止我所拥有的是:

<HTML>
<STYLE>
span.spoil {background-color: black;}
span.spoiled {background-color: white;}
</STYLE>
<HEAD>
<TITLE>SPOIL</TITLE>
<META http-equiv="Content-Type" content="text/html;charset=UTF-8">
<!--LINK rel="Stylesheet" type="text/css" href=".css"-->
</HEAD>
<BODY>

This is a text with <span class="spoil" onclick="showspoil(this)">spoil data</span>.
<br>
<span class="spoil" onclick="showspoil(this)">Unspoil me.</span>
<br>
<span class="spoil" onclick="showspoil(this)">And me.</span>



<script>
function showspoil(e) {
e.className="spoiled";
}

// var classname = document.getElementsByClassName("spoil");
// for (var i = 0; i < classname.length; i++) {
// classname[i].addEventListener('click', showspoil(WHATEXACTLY?), false);
// }
</script>

</BODY>
</HTML>

它完成了这项工作,只是我发现必须为每个元素显式编写“onclick...”很烦人。因此,我尝试通过模仿在网络上找到的类似资源,为类的每个成员添加一个事件监听器:不幸的是,这部分(上面注释的代码)不起作用。特别是,我不知道应该将哪个参数传递给函数来传输“元素本身”。

有人可以帮忙吗?如果我可以偷懒的话,我更多的是寻找这个特定查询的答案,而不是寻找我应该学习的一系列类(class)的指针:我承认,我已经很久没有做 html 了,而且我确信我需要大量阅读才能再次提高效率:简单地说,我现在没有时间,而且我并不真正需要它:我只需要解决这个问题来建立一个可行的解决方案。

最佳答案

这里的问题是您正在调用该方法并分配它返回的内容以绑定(bind)为事件监听器

classname[i].addEventListener('click', showspoil(WHATEXACTLY?), false);

您可以使用闭包或直接调用该元素。

classname[i].addEventListener('click', function () { showspoil(this); }, false);

classname[i].addEventListener('click', showspoil, false);

如果直接调用,则需要将函数改为

function showspoil(e) {
this.className="spoiled";
}

另一种选择是不绑定(bind)每个元素上的点击,仅使用事件委托(delegate)。

function showspoil(e) {
e.className="spoiled";
}

document.addEventListener("click", function (e) { //list for clcik on body
var clicked = e.target; //get what was clicked on
if (e.target.classList.contains("spoil")) { //see if it is an element with the class
e.target.classList.add("spoiled"); //if it is, add new class
}
});
.spoil { color: red }
.spoiled { color: green }
This is a text with <span class="spoil">spoil data</span>.
<br>
<span class="spoil">Unspoil me.</span>
<br>
<span class="spoil">And me.</span>

关于javascript - 使 html 类的所有元素对单击使用react,这将修改元素本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42724359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com