javascript - 使用纯 JavaScript 禁用基于 innerhtml 的选择选项

标签 javascript html

场景:用户通过 HTML 表单投票选择乘坐公共(public)汽车进行实地考察。共有三个选项:

    <select id="selectbox">
      <option>Berlin</option>
      <option>Munich</option>
      <option>Cologne</option>
    </select>

免费巴士座位存储在数据库中/从数据库中读取:($tour 是我们保存免费座位的数组)

<table class="status">
  <tr><td>Berlin: <span id="t1">available (<?php echo $tour[0]; ?> seats)</span></td></tr>
  <tr><td>Munich: <span id="t2">available (<?php echo $tour[1]; ?> seats)</span></td></tr>
  <tr><td>Cologne: <span id="t3">available (<?php echo $tour[2]; ?> seats)</span></td></tr>
</table>

如果免费座位为零,我们会使用普通 JavaScript 显示“抱歉,已订满”信息:

// get content of status table
var t1 = document.getElementById("t1").innerHTML;
var t2 = document.getElementById("t2").innerHTML;
var t3 = document.getElementById("t3").innerHTML;
var bookedout = "sorry, booked out!"

    // check if condition is met
if (t1 == "available (0 seats)") {
    document.getElementById("t1").innerHTML = bookedout;
}
if (t2 == "available (0 seats)") {
    document.getElementById("t2").innerHTML = bookedout ;
}
if (t3 == "available (0 seats)") {
    document.getElementById("t3").innerHTML = bookedout ;
}

工作正常。但是,现在我有点迷路了。上述条件还应从#selectbox based on the option's innerHTML 中删除相应的选项。在 jQuery 中,我会使用类似#selectbox option:contains('stringhere') 的东西。

但是,我想用最纯粹的 JavaScript 来完成。有什么想法吗?

最佳答案

这很简单..

首先在您的 html 中为您的选项赋值:

<select id="selectbox">
  <option>Berlin</option>
  <option>Munich</option>
  <option>Cologne</option>
</select>

然后在js中:

var mySelect = document.getElementById("selectbox");
//function to get option values as array
function getOptionsArr() {
var optionsArray =[],options = mySelect.options; 
var i = 0, len = options.length;
// store the options value in an array
while (i < len)
{
  optionsArray.push(options[i++].value);
}
    return optionsArray;
}
var t1 = document.getElementById("t1").innerHTML;
var t2 = document.getElementById("t2").innerHTML;
var t3 = document.getElementById("t3").innerHTML;
var bookedout = "sorry, booked out!"

// check if condition is met
if (t1 == "available (0 seats)"){
    document.getElementById("t1").innerHTML = bookedout;
    //this will get the whole parent node and child node inner text we split at : and get the value
    var textArr = document.getElementById("t1").parentElement.innerText.split(':');
 // find the index of value from our array created above and remove that option from select
 mySelect.remove(getOptionsArr().indexOf(textArr [0]))
}
//repeat the same for other
if (t2 == "available (0 seats)"){
 document.getElementById("t2").innerHTML = bookedout ;
 var textArr = document.getElementById("t2").parentElement.innerText.split(':');
 mySelect.remove(getOptionsArr().indexOf(textArr [0]))
}
if (t3 == "available (0 seats)"){
document.getElementById("t3").innerHTML = bookedout ;
 var textArr = document.getElementById("t3").parentElement.innerText.split(':');
 mySelect.remove(getOptionsArr().indexOf(textArr [0]))
}

另外你可以重构它

var mySelect = document.getElementById("selectbox");
//function to get option values as array
function getOptionsArr() {
var optionsArray =[],options = mySelect.options; 
var i = 0, len = options.length;
// store the options value in an array
while (i < len)
{
  optionsArray.push(options[i++].value);
}
    return optionsArray;
}

var t1 = document.getElementById("t1").innerHTML;
var t2 = document.getElementById("t2").innerHTML;
var t3 = document.getElementById("t3").innerHTML;
var bookedout = "sorry, booked out!"

// check if condition is met
if (t1 == "available (0 seats)"){
    doUpdateDOM("t1")
}
if (t2 == "available (0 seats)"){
doUpdateDOM("t2")
}
if (t3 == "available (0 seats)"){
doUpdateDOM("t3")
}

function doUpdateDOM(nodeID){
    document.getElementById(nodeID).innerHTML = bookedout;
    var textArr = document.getElementById(nodeID).parentElement.innerText.split(':');
 mySelect.remove(optionsArray.indexOf(textArr [0]))
}

关于javascript - 使用纯 JavaScript 禁用基于 innerhtml 的选择选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39200509/

相关文章:

html - 为什么我的样式没有应用于 IE 中的非 HTML 元素?

javascript - JQuery .load() 没有添加到 DOM?

javascript - 删除照片时 ng-src 更新但 src 不更新

javascript - 一个简单的 jQuery/AJAX 查询

javascript - 如何将 PHP 数组传递给 JavaScript 函数?

javascript - 如何在 indexedDB 上创建列/对象

javascript - 链接字体、CSS 和脚本的顺序是什么

html - CSS flexbox 布局中断

javascript - 我怎样才能延迟一个功能

javascript - python flask : Return HTML Content