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

标签 javascript html

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

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

相关文章:

javascript - 当图像实际出现在屏幕上时,如何让 jQuery 调用事件处理程序?

JavaScript 类 : create and destroy elements

javascript - 如何在单击按钮而不是页面时打印 HTML 内容?

python - Python 3 中的 HTML 解析文本

javascript - 可以在 Sharepoint 中获取所有已安装的应用程序吗?

javascript - 将 Moment 与 Angular 和 TypeScript 结合使用

javascript - 火狐操作系统 TCPSocket API : SSL received a record that exceeded the maximum permissible length

javascript - 如何使用 React 添加帖子?

javascript - 实现HTML Canvas 图像着色功能

javascript - 全高内容,宽度尽可能小