如何在网页上多次使用由JavaScript生成的类?
问题描述:
我正在用一个临时电子邮件地址读入一个文本文件,并让这个片段构建了一个HTML链接。如何在网页上多次使用由JavaScript生成的类?
<script>
//<![CDATA[
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
document.getElementsByClassName('temporary_email')[0].innerHTML = "<a href=\"mailto:" + xhttp.responseText + "\">Email</a>";
}
};
xhttp.open("GET", "/temporary_email.txt", true);
xhttp.send();
//]]>
</script>
整个事情按预期工作,我可以公正的地方<span class="temporary_email"></span>
任何地方获得一个链接。
问题:看来我只能抓取这一次;如果我的身体中有mailto:
链接,而另一个链接在我的页脚中,则脚本将不起作用。所以,我认为这实际上不是一个变量,而我作为JS noob是真正的问题。
PS:我试图避免jQuery。尝试了几个虚拟替代方法,如复制脚本并为document.getElementsByClassName
指定另一个名称,但没有任何内容。基本上我正在进行一个快速和肮脏的修复,直到我知道足够的JavaScript来正确执行此操作。
答
原因你只得到追加到类名匹配的第一个实例的JS,就是因为document.getElementsByClassName()
返回数组的匹配元素。
通过使用document.getElementsByClassName('temporary_email')[0]
,你只会选择第一个匹配的元素。
你需要更新到下面的代码:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
var elements = document.getElementsByClassName('temporary_email');
for (var i = 0; i < elements.length; i++) {
elements[i].innerHTML = "<a href=\"mailto:" + xhttp.responseText + "\">Email</a>";
}
}
};
xhttp.open("GET", "/temporary_email.txt", true);
xhttp.send();
Here's一个基本的小提琴。
通过这种方式,您可以遍历数组,并且每个数组都可以根据需要更改innerHTML
。另外,没有jQuery!
答
你可以遍历您temporary_email
链接和更新它们:
Array.from(document.getElementsByClassName('temporary_email'))
.forEach(function(el){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
el.innerHTML = "<a href=\"mailto:" + xhttp.responseText + "\">Emai l</a>";
}
};
xhttp.open("GET", "/temporary_email.txt", true);
xhttp.send();
})
感谢您的迅速回复。我真的不知道哪个答案更好,但我给了G.Hunt一个信用,因为他有点快,并且在他的评论中更多地解释了发生的事情。尽管如此,你还是很喜欢。在决定将它发布在这里之前,我花了几个小时摆弄这个问题。 – pattulus