javascript - 我该如何优化这段代码?我需要在所有 50 个州都这样做,并且在每个州,文本都会发生变化
问题描述
我该如何优化这段代码?我需要在所有 50 个状态中执行此操作,并且在每个状态中,文本都会发生变化,所以我想知道除了添加 50 个 ifs 条件之外是否还有其他方法
我想要做的是在每个状态中添加 50 个动态文本,每个状态都有不同的信息,这是在 wordpress 中开发的
如果有其他方法可以使它更优化或更好的实践,也许使用 jqueryde。谢谢
<select onchange="states_info(this.value)" name="country" id="country">
<option value="Alabama" selected><?php echo "Alabama"?></option>
<option value="Alaska"><?php echo "Alaska" ?></option>
<option value="Arizona"><?php echo "Arizona" ?></option>
<option value="Wisconsin"><?php echo "Wisconsin" ?></option>
</select>
<h2 id="Title" ><?php echo "Alabama Requirements"?></h2>
<p id="credits" ><?php echo "Total Credits: 12 "?></p>
<ul>
<li id="li_1" ><?php echo "At least 1 in Ethics"?></li>
<li id="li_2" ><?php echo "At least 6 Live"?></li>
<li id="li_3" class="hide"></li>
</ul>
<p id ="change_due" class="b" ></p>
<p id="Deadline"><?php echo " Deadline: December 31st"?></p>
<p id="change" class="b"></p>
<p id="reported" ><?php echo "How are credits reported?"?></p>
<button id="webinars" class="button-custom"></button>
<button id="ethics" class="button-custom"></button>
<style>
p.b{
font-style: italic;
display:none;
color: blue;
}
.hide{
display:none;
}
.thick {
font-weight: bold;
}
.normal {
font-weight: normal;
}
.button-custom{
background-color: Transparent;
background-repeat:no-repeat;
border-color: #5CCAF3;
color: #5CCAF3;
border-radius:5px;
cursor:pointer;
overflow: hidden;
text-align: center;
width: 100%;
display:none;
height: 45px;
}
</style>
<script>
function states_info(state){
if(state =="Alabama"){
document.getElementById("Title").innerHTML = "Alabama Requirements";
document.getElementById("credits").innerHTML = "Total Credits: 12 credit hours every year";
document.getElementById("li_1").style.display = "block";
var normal = document.getElementById("li_1");
normal.classList.remove('thick');
normal.classList.add("normal");
document.getElementById("li_1").innerHTML = "• At least 1 in Ethics";
document.getElementById("li_2").style.display = "block";
var bold = document.getElementById("li_2");
bold.classList.remove('thick');
bold.classList.add("normal");
document.getElementById("li_2").innerHTML = "• At least 6 Live";
document.getElementById("Deadline").innerHTML = " Deadline: December 31st";
document.getElementById("change").style.display = "none";
document.getElementById("reported").innerHTML = "How are credits reported? Alabama .";
document.getElementById("webinars").style.display = "none";
document.getElementById("ethics").style.display = "none";
document.getElementById("change_due").style.display = "none";
}
if(state == "Wisconsin"){
document.getElementById("Title").innerHTML = "Wisconsin Requirements";
document.getElementById("credits").innerHTML = "Total Credits: 30 credit hours every 2 years.";
document.getElementById("li_1").style.display = "block";
document.getElementById("li_1").innerHTML = "• At least 3 in Ethics ";
document.getElementById("li_2").style.display = "none";
document.getElementById("change_due").style.display = "block";
document.getElementById("change_due").innerHTML = "*Change due";
document.getElementById("Deadline").innerHTML = "Deadline: December 31st";
document.getElementById("change").style.display = "none";
document.getElementById("reported").innerHTML = "How are credits reported? Wisconsin ";
document.getElementById("webinars").style.display = "block";
document.getElementById("webinars").innerHTML = "Live webinars for Wisconsin";
document.getElementById("ethics").style.display = "block";
document.getElementById("ethics").innerHTML = "Live ethics webinars for Wisconsin";
}
}
</script>
解决方案
使用包含每个状态信息的对象:
const state_data = {
Alabama: {
credits: "Total Credits: 12 credit hours every year",
Deadline: "December 31st",
change_due: null,
li_1: "• At least 1 in Ethics",
li_2: "• At least 6 Live",
reported: "How are credits reported? Alabama .",
change: null,
webinars: null,
ethics: null
},
Wisconsin: {
credits: "Total Credits: 30 credit hours every 2 years.",
deadline: "December 31st",
change_due: "*Change due",
li_1: "• At least 3 in Ethics",
li_2: null,
reported: "How are credits reported? Wisconsin .",
change: null,
webinars: "Live webinars for Wisconsin",
ethics: "Live ethics webinars for Wisconsin"
},
...
};
function states_info(state) {
document.getElementById("Title").innerHTML = `${state} Requirements`;
Object.entries(state_data[state]).forEach((id, value) => {
let el = document.getElementById(id);
if (value !== null) {
el.style.display = "block";
el.innerHTML = value;
} else {
el.style.display = "none";
}
});
}
推荐阅读
- reactjs - 如何在使用 google firebase auth 登录之前确定用户是否有以前的登录凭据
- flutter - GraphQL 响应解析 Flutter 最佳实践
- python - Sqlite 选择并创建新列
- javascript - 获取调用导致 net::ERR_CONNECTION_REFUSED,出现错误时如何获取另一台服务器
- node.js - 对象作为 React 孩子无效 - 必须访问两个孩子
- angular - Angular 路由 redirectTo 显示错误的组件
- python - 如何将此请求转换为来自 ClientSession 请求的请求?(aiohttp,异步)
- python - 将嵌套json转换为数据框时如何从用户那里获取字典的输入
- substrate - FRAME2存储中ValueQuery有什么用?
- perl - XML::Twig::XPath: `findnodes` 仍然比较我应该使用 `findnodes` 而不是 `get_xpath`