如何减少此代码中的变量和 if 语句的数量?
How do I reduce the amount of variables and if statements in this code?
减少代码使用量的最佳方法是什么?
最终我将有大约 20 个按钮,因此似乎没有必要多次编写变量和 if 语句。
有人可以建议一种减少、更清晰的代码的方法吗?
将变量放入数组中是否有帮助?
var art1 = document.getElementById("article1").textContent;
var button1 = document.getElementById("btn1");
var art2 = document.getElementById("article2").textContent;
var button2 = document.getElementById("btn2");
var art3 = document.getElementById("article3").textContent;
var button3 = document.getElementById("btn3");
if (true) {
button1.addEventListener("click", function() {
document.getElementById("fillMe").innerHTML = art1;
});
}
if (true) {
button2.addEventListener("click", function() {
document.getElementById("fillMe").innerHTML = art2;
});
}
if (true) {
button3.addEventListener("click", function() {
document.getElementById("fillMe").innerHTML = art3;
});
}
.article {
display: none;
}
<div id="article1" class="article">
Article 1
</div>
<div id="article2" class="article">
Article 2
</div>
<div id="article3" class="article">
Article 3
</div>
<button class ="button" id="btn1">Button 1</button>
<button class ="button" id="btn2">Button 2</button>
<button class ="button" id="btn3">Button 3</button>
<div id="fillMe"></div>
简单地做一个接受数字作为显示文章参数的函数:
document.querySelectorAll("button").forEach(b => b.addEventListener("click", function(e) {
fillMe(e.target.id.substring(e.target.id.length - 1))
}))
function fillMe(num) {
document.getElementById("fillMe").innerHTML = document.getElementById("article" + num).textContent;
}
.article {
display: none;
}
<div id="article1" class="article">
Article 1
</div>
<div id="article2" class="article">
Article 2
</div>
<div id="article3" class="article">
Article 3
</div>
<button class="button" id="btn1">Button 1</button>
<button class="button" id="btn2">Button 2</button>
<button class="button" id="btn3">Button 3</button>
<div id="fillMe"></div>
目前文章的编号是来自被点击按钮的id,这当然可以很容易地更改为数据文章属性或类似的东西
["1", "2", "3"].forEach(function(i) {
if (true) { // I do not know why you need this though
var content = document.getElementById("article" + i).textContent;
var oButton = document.getElementById("btn" + i);
oButton.addEventListener("click", function() {
document.getElementById("fillMe").innerHTML = content;
});
}
});
如果您的文章名称和 btn 名称不是简单的 article1 、 article2 ...等等和 btn1、btn2...等等。
你可以试试这个方法
您制作了一个 class ArticleMap ,并维护了一个 articleMap 对象数组。
然后其他一切都很简单,只需遍历数组并初始化点击监听器即可。
class ArticleMap{
constructor(articleId,btnId){
this.articleId=articleId;
this.btnId=btnId;
}
}
var articleArr=[new ArticleMap('x','btn1'),new ArticleMap('y','btn2'),new ArticleMap('z','btn3')];
var targetId='fillMe';
var targetElement= document.getElementById(targetId);
articleArr.forEach(function (item){
document.getElementById(item.btnId).addEventListener('click',function (){
targetElement.innerHTML=document.getElementById(item.articleId).textContent;
});
});
.article {
display: none;
}
<div id="x" class="article">
Article 1
</div>
<div id="y" class="article">
Article 2
</div>
<div id="z" class="article">
Article 3
</div>
<button class ="button" id="btn1">Button 1</button>
<button class ="button" id="btn2">Button 2</button>
<button class ="button" id="btn3">Button 3</button>
<div id="fillMe"></div>
减少代码使用量的最佳方法是什么? 最终我将有大约 20 个按钮,因此似乎没有必要多次编写变量和 if 语句。 有人可以建议一种减少、更清晰的代码的方法吗? 将变量放入数组中是否有帮助?
var art1 = document.getElementById("article1").textContent;
var button1 = document.getElementById("btn1");
var art2 = document.getElementById("article2").textContent;
var button2 = document.getElementById("btn2");
var art3 = document.getElementById("article3").textContent;
var button3 = document.getElementById("btn3");
if (true) {
button1.addEventListener("click", function() {
document.getElementById("fillMe").innerHTML = art1;
});
}
if (true) {
button2.addEventListener("click", function() {
document.getElementById("fillMe").innerHTML = art2;
});
}
if (true) {
button3.addEventListener("click", function() {
document.getElementById("fillMe").innerHTML = art3;
});
}
.article {
display: none;
}
<div id="article1" class="article">
Article 1
</div>
<div id="article2" class="article">
Article 2
</div>
<div id="article3" class="article">
Article 3
</div>
<button class ="button" id="btn1">Button 1</button>
<button class ="button" id="btn2">Button 2</button>
<button class ="button" id="btn3">Button 3</button>
<div id="fillMe"></div>
简单地做一个接受数字作为显示文章参数的函数:
document.querySelectorAll("button").forEach(b => b.addEventListener("click", function(e) {
fillMe(e.target.id.substring(e.target.id.length - 1))
}))
function fillMe(num) {
document.getElementById("fillMe").innerHTML = document.getElementById("article" + num).textContent;
}
.article {
display: none;
}
<div id="article1" class="article">
Article 1
</div>
<div id="article2" class="article">
Article 2
</div>
<div id="article3" class="article">
Article 3
</div>
<button class="button" id="btn1">Button 1</button>
<button class="button" id="btn2">Button 2</button>
<button class="button" id="btn3">Button 3</button>
<div id="fillMe"></div>
目前文章的编号是来自被点击按钮的id,这当然可以很容易地更改为数据文章属性或类似的东西
["1", "2", "3"].forEach(function(i) {
if (true) { // I do not know why you need this though
var content = document.getElementById("article" + i).textContent;
var oButton = document.getElementById("btn" + i);
oButton.addEventListener("click", function() {
document.getElementById("fillMe").innerHTML = content;
});
}
});
如果您的文章名称和 btn 名称不是简单的 article1 、 article2 ...等等和 btn1、btn2...等等。
你可以试试这个方法
您制作了一个 class ArticleMap ,并维护了一个 articleMap 对象数组。 然后其他一切都很简单,只需遍历数组并初始化点击监听器即可。
class ArticleMap{
constructor(articleId,btnId){
this.articleId=articleId;
this.btnId=btnId;
}
}
var articleArr=[new ArticleMap('x','btn1'),new ArticleMap('y','btn2'),new ArticleMap('z','btn3')];
var targetId='fillMe';
var targetElement= document.getElementById(targetId);
articleArr.forEach(function (item){
document.getElementById(item.btnId).addEventListener('click',function (){
targetElement.innerHTML=document.getElementById(item.articleId).textContent;
});
});
.article {
display: none;
}
<div id="x" class="article">
Article 1
</div>
<div id="y" class="article">
Article 2
</div>
<div id="z" class="article">
Article 3
</div>
<button class ="button" id="btn1">Button 1</button>
<button class ="button" id="btn2">Button 2</button>
<button class ="button" id="btn3">Button 3</button>
<div id="fillMe"></div>