Javascript 排序下拉列表

Javascript 排序下拉列表,javascript,html,html-select,Javascript,Html,Html Select,我正在尝试对html中的下拉列表(选择器)进行排序 我有两个列表,一个预选,然后应该用来定义secont列表的内容 简短的代码示例: <!doctype html> <html class=""> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <bo

我正在尝试对html中的下拉列表(选择器)进行排序

我有两个列表,一个预选,然后应该用来定义secont列表的内容

简短的代码示例:

<!doctype html>
<html class="">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

</head>

<body>
<table width=100% border="0">
  <tr>
  <td>&nbsp;</td>
    <td>Product</td>
    <td><select name="product" id="product" width="300" style="width: 300px">
      <option></option>
      <option id="TLX">TLX</option>
      <option id="FLX">FLX</option>
      <option id="MLX">MLX</option>
    </select></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
  <td>&nbsp;</td>
    <td>Power</td>
    <td><select name="power" id="power" width="300" style="width: 300px">
      <option></option>
      <option name="TLX">6</option>
      <option name="TLX">8</option>
      <option name="TLX">10</option>
      <option name="TLX">12</option>
      <option name="TLX">15</option>
      <option name="FLX">6</option>
      <option name="FLX">8</option>
      <option name="FLX">10</option>
      <option name="FLX">12</option>
      <option name="FLX">15</option>
      <option name="FLX">17</option>
      <option name="MLX">30</option>
      <option name="MLX">40</option>
      <option name="MLX">60</option>
    </select></td>
    <td>&nbsp;</td>
  </tr>
</table>

</body>
</html>

产品
TLX
FLX
MLX
权力
6.
8.
10
12
15
6.
8.
10
12
15
17
30
40
60
我希望b能够选择产品,然后必须对电源列表进行相应的分类


例如,如果选择了TLX,则第二个列表中仅显示了6、8、10、12和15种可能性。

您需要级联下拉列表

请查看以下链接:

  • (建议最多的链接是本项目的页面)

您还可以从谷歌搜索或其他网站上找到关于级联下拉列表的其他链接。

您需要级联下拉列表

请查看以下链接:

  • (建议最多的链接是本项目的页面)

你还可以从谷歌搜索或其他网站上找到关于层叠下拉列表的其他链接。

使用香草,你可以像下面这样做

看到演示正在运行吗

无使用名称属性、使用数据名称、值或其他属性、名称属性无法跨浏览器工作以选项标记

我将使用数据名

<table width=100% border="0">
  <tr>
  <td>&nbsp;</td>
    <td>Product</td>
    <td><select name="product" id="product" width="300" style="width: 300px">
      <option></option>
      <option id="TLX">TLX</option>
      <option id="FLX">FLX</option>
      <option id="MLX">MLX</option>
    </select></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
  <td>&nbsp;</td>
    <td>Power</td>
    <td><select name="power" id="power" width="300" style="width: 300px">
      <option></option>
      <option data-name="TLX">6</option>
      <option data-name="TLX">8</option>
      <option data-name="TLX">10</option>
      <option data-name="TLX">12</option>
      <option data-name="TLX">15</option>
      <option data-name="FLX">6</option>
      <option data-name="FLX">8</option>
      <option data-name="FLX">10</option>
      <option data-name="FLX">12</option>
      <option data-name="FLX">15</option>
      <option data-name="FLX">17</option>
      <option data-name="MLX">30</option>
      <option data-name="MLX">40</option>
      <option data-name="MLX">60</option>
    </select></td>
    <td>&nbsp;</td>
  </tr>
</table>

产品
TLX
FLX
MLX
权力
6.
8.
10
12
15
6.
8.
10
12
15
17
30
40
60
您可以使用它对列表进行排序

function sortDropdownList(ddl){

    var options = [].slice.apply(ddl.options, [0]);
    ddl.innerHTML = "";
    var sorted = options.sort(function(a,b){     
       return +(a.innerText) - +(b.innerText);
    });

    for(var i = 0; i < sorted.length; i++){
      ddl.options.add(sorted[i]);
    }  

}
函数sortDropdownList(ddl){
var options=[].slice.apply(ddl.options[0]);
ddl.innerHTML=“”;
var sorted=options.sort(函数(a,b){
返回+(a.innerText)-+(b.innerText);
});
对于(变量i=0;i
您需要传递一个dom元素,而不是jQuery元素

要将“选择父对象”绑定到“选择子对象”,可以执行以下操作

在初始化页面上添加代码

var parentSelect = document.getElementById("product");
var childSelect = document.getElementById("power");
var options = [].slice.apply(childSelect, [0]);
var emptyOption = options[0];
childSelect.innerHTML = "";

parentSelect.addEventListener("change", function(e){

    var selectedId = parentSelect.options[parentSelect.selectedIndex].id;
    childSelect.innerHTML = "";
    childSelect.options.add(emptyOption);
    for(var i = 0; i < options.length; i++){

        if( options[i].getAttribute("data-name") == selectedId ){

           childSelect.options.add(options[i]);

        }
    }

    sortDropdownList(childSelect);

});
var parentSelect=document.getElementById(“产品”);
var childSelect=document.getElementById(“power”);
var options=[].slice.apply(childSelect[0]);
var emptyOption=期权[0];
childSelect.innerHTML=“”;
parentSelect.addEventListener(“更改”,函数(e){
var selectedId=parentSelect.options[parentSelect.selectedIndex].id;
childSelect.innerHTML=“”;
childSelect.options.add(清空选项);
对于(变量i=0;i
使用香草,您可以执行以下操作

看到演示正在运行吗

无使用名称属性、使用数据名称、值或其他属性、名称属性无法跨浏览器工作以选项标记

我将使用数据名

<table width=100% border="0">
  <tr>
  <td>&nbsp;</td>
    <td>Product</td>
    <td><select name="product" id="product" width="300" style="width: 300px">
      <option></option>
      <option id="TLX">TLX</option>
      <option id="FLX">FLX</option>
      <option id="MLX">MLX</option>
    </select></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
  <td>&nbsp;</td>
    <td>Power</td>
    <td><select name="power" id="power" width="300" style="width: 300px">
      <option></option>
      <option data-name="TLX">6</option>
      <option data-name="TLX">8</option>
      <option data-name="TLX">10</option>
      <option data-name="TLX">12</option>
      <option data-name="TLX">15</option>
      <option data-name="FLX">6</option>
      <option data-name="FLX">8</option>
      <option data-name="FLX">10</option>
      <option data-name="FLX">12</option>
      <option data-name="FLX">15</option>
      <option data-name="FLX">17</option>
      <option data-name="MLX">30</option>
      <option data-name="MLX">40</option>
      <option data-name="MLX">60</option>
    </select></td>
    <td>&nbsp;</td>
  </tr>
</table>

产品
TLX
FLX
MLX
权力
6.
8.
10
12
15
6.
8.
10
12
15
17
30
40
60
您可以使用它对列表进行排序

function sortDropdownList(ddl){

    var options = [].slice.apply(ddl.options, [0]);
    ddl.innerHTML = "";
    var sorted = options.sort(function(a,b){     
       return +(a.innerText) - +(b.innerText);
    });

    for(var i = 0; i < sorted.length; i++){
      ddl.options.add(sorted[i]);
    }  

}
函数sortDropdownList(ddl){
var options=[].slice.apply(ddl.options[0]);
ddl.innerHTML=“”;
var sorted=options.sort(函数(a,b){
返回+(a.innerText)-+(b.innerText);
});
对于(变量i=0;i
您需要传递一个dom元素,而不是jQuery元素

要将“选择父对象”绑定到“选择子对象”,可以执行以下操作

在初始化页面上添加代码

var parentSelect = document.getElementById("product");
var childSelect = document.getElementById("power");
var options = [].slice.apply(childSelect, [0]);
var emptyOption = options[0];
childSelect.innerHTML = "";

parentSelect.addEventListener("change", function(e){

    var selectedId = parentSelect.options[parentSelect.selectedIndex].id;
    childSelect.innerHTML = "";
    childSelect.options.add(emptyOption);
    for(var i = 0; i < options.length; i++){

        if( options[i].getAttribute("data-name") == selectedId ){

           childSelect.options.add(options[i]);

        }
    }

    sortDropdownList(childSelect);

});
var parentSelect=document.getElementById(“产品”);
var childSelect=document.getElementById(“power”);
var options=[].slice.apply(childSelect[0]);
var emptyOption=期权[0];
childSelect.innerHTML=“”;
parentSelect.addEventListener(“更改”,函数(e){
var selectedId=parentSelect.options[parentSelect.selectedIndex].id;
childSelect.innerHTML=“”;
childSelect.options.add(清空选项);
对于(变量i=0;i
如果您正在使用jquery,可以这样完成:


注意:在product下拉列表中,将每个选项的id属性更改为name。

如果您使用的是jquery,可以这样完成:


注意:在“产品”下拉列表中,将每个选项的id属性更改为“名称”。

此处未尝试跨浏览器…但我能想到的只有一种浏览器可能会给您带来麻烦:)

代码

var product = document.getElementById('product');
var power   = document.getElementById('power');
var allOpts = power.getElementsByTagName('option');
var opts = {
    empty: allOpts[0]
};

// This builds three additional lists of options for each type of product
// It relies on having a single attribute - if more are added, this logic
// would need to be adjusted.
for(var i = 1; i < allOpts.length; ++i) {
    var name = allOpts[i].attributes[0].value;

    opts[name] = opts[name] || [];
    opts[name].push(allOpts[i]);
}

// Each time product is changed, just loop through based on the selected ID
// and add those options to the power select list (removing all children first)
product.addEventListener('change', function(evt) {
    var val = evt.target.value;

    power.innerHTML = '';
    power.appendChild(opts.empty);
    for(var i = 0; i < opts[val].length; ++i) {
        power.appendChild(opts[val][i]);
    }
});
更新

var product = document.getElementById('product');
var power   = document.getElementById('power');
var allOpts = power.getElementsByTagName('option');
var opts = {
    empty: allOpts[0]
};

// This builds three additional lists of options for each type of product
// It relies on having a single attribute - if more are added, this logic
// would need to be adjusted.
for(var i = 1; i < allOpts.length; ++i) {
    var name = allOpts[i].attributes[0].value;

    opts[name] = opts[name] || [];
    opts[name].push(allOpts[i]);
}

// Each time product is changed, just loop through based on the selected ID
// and add those options to the power select list (removing all children first)
product.addEventListener('change', function(evt) {
    var val = evt.target.value;

    power.innerHTML = '';
    power.appendChild(opts.empty);
    for(var i = 0; i < opts[val].length; ++i) {
        power.appendChild(opts[val][i]);
    }
});
只需再多做一点工作,就可以使其更加通用—例如,当原始答案的注释中出现新需求时:)

附加要求

注意:我添加了空选项元素以使解决方案更简单。代码也可以调整以处理缺少它的情况,但这将留给读者作为练习


这里没有人尝试使用跨浏览器……但我能想到的只有一种浏览器可能会给您带来麻烦:)

代码

var product = document.getElementById('product');
var power   = document.getElementById('power');
var allOpts = power.getElementsByTagName('option');
var opts = {
    empty: allOpts[0]
};

// This builds three additional lists of options for each type of product
// It relies on having a single attribute - if more are added, this logic
// would need to be adjusted.
for(var i = 1; i < allOpts.length; ++i) {
    var name = allOpts[i].attributes[0].value;

    opts[name] = opts[name] || [];
    opts[name].push(allOpts[i]);
}

// Each time product is changed, just loop through based on the selected ID
// and add those options to the power select list (removing all children first)
product.addEventListener('change', function(evt) {
    var val = evt.target.value;

    power.innerHTML = '';
    power.appendChild(opts.empty);
    for(var i = 0; i < opts[val].length; ++i) {
        power.appendChild(opts[val][i]);
    }
});
更新

var product = document.getElementById('product');
var power   = document.getElementById('power');
var allOpts = power.getElementsByTagName('option');
var opts = {
    empty: allOpts[0]
};

// This builds three additional lists of options for each type of product
// It relies on having a single attribute - if more are added, this logic
// would need to be adjusted.
for(var i = 1; i < allOpts.length; ++i) {
    var name = allOpts[i].attributes[0].value;

    opts[name] = opts[name] || [];
    opts[name].push(allOpts[i]);
}

// Each time product is changed, just loop through based on the selected ID
// and add those options to the power select list (removing all children first)
product.addEventListener('change', function(evt) {
    var val = evt.target.value;

    power.innerHTML = '';
    power.appendChild(opts.empty);
    for(var i = 0; i < opts[val].length; ++i) {
        power.appendChild(opts[val][i]);
    }
});
只需再多做一点工作,就可以使其更加通用—例如,当原始答案的注释中出现新需求时:)

附加要求

注意:我添加了空选项元素以使解决方案更简单。代码也可以调整以处理缺少它的情况,但这将留给读者作为练习


product