Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将select的所有选项标签替换为其值?_Javascript_Html - Fatal编程技术网

Javascript 如何将select的所有选项标签替换为其值?

Javascript 如何将select的所有选项标签替换为其值?,javascript,html,Javascript,Html,如果select元素的值与其标签不同,如何用相应的值替换所有标签 其次,我如何在不使用任何框架的情况下按字母顺序对列表进行排序 输入: <select name="options" > <option value="apple">Fruit</option> <option value="rye">Bread</option> <option value="beer">Beverage</opt

如果select元素的值与其标签不同,如何用相应的
值替换所有标签

其次,我如何在不使用任何框架的情况下按字母顺序对列表进行排序

输入:

<select name="options" >
    <option value="apple">Fruit</option>
    <option value="rye">Bread</option>
    <option value="beer">Beverage</option>  
</select>

果
面包
饮料
输出:

<select name="options" >
    <option value="apple">apple</option>
    <option value="beer">beer</option>  
    <option value="rye">rye</option>
</select>

苹果
啤酒
黑麦

当然可以,使用
getElementsByTagName()
innerHTML

var allOptions = document.getElementsByTagName("option");
for (var i=0; i<allOptions.length; i++) {
   allOptions[i].innerHTML = allOptions[i].value;
}
var allOptions=document.getElementsByTagName(“选项”);
对于(var i=0;i


要按字母顺序对选项进行排序,请参阅:

如果您希望它们相同,只需省略
值属性即可-然后
选项
标记内的字符串将作为值发送到服务器。查看此处:。

您可以执行以下操作:

<select name="options" >
    <option value="apple">Fruit</option>
    <option value="rye">Bread</option>
    <option value="beer">Beverage</option>  
</select>

<script>

    var options = document.getElementsByName("options")[0].querySelectorAll("option");
    Array.prototype.slice.call(options).map(function (option) {
        option.innerHTML = option.value;
    });
</script>

果
面包
饮料
var options=document.getElementsByName(“选项”)[0].querySelectorAll(“选项”);
Array.prototype.slice.call(选项).map(函数(选项){
option.innerHTML=option.value;
});

您可以将其封装在一个函数中,以便对select进行排序,并在删除或添加select中的任何元素时进行排序

函数应该是这样的:

function sortSelect(selElem) {
    var tmpAry = new Array();
    for (var i=0;i<selElem.options.length;i++) {
        tmpAry[i] = new Array();
        tmpAry[i][0] = selElem.options[i].text;
        tmpAry[i][1] = selElem.options[i].value;
    }
    tmpAry.sort();
    while (selElem.options.length > 0) {
        selElem.options[0] = null;
    }
    for (var i=0;i<tmpAry.length;i++) {
        var op = new Option(tmpAry[i][0], tmpAry[i][1]);
        selElem.options[i] = op;
    }
    return;
}

谢谢!太简洁了!我怎样才能按字母顺序对列表中的值进行排序?@SteveBrown很抱歉,我错过了排序部分。请参阅链接问题以获得排序的解决方案。虽然这里不使用jQuery,但我听说如果不在选项标记中指定值,jQuery有时会出现问题。指定值也不是最佳做法吗es使用value属性?即使您使用DTD Strict,
value
属性也是可选的,因此我假设省略该属性是标准做法。关于jQuery,我没有遇到任何类似的问题。但是如果您指的是中描述的错误,那么它似乎只影响了IE,而且似乎是从jQuery 1.4.4开始修复。也影响chrome。“你不能依赖jQuery使用文本内容来代替value属性。它可以用于过滤器,但不一定用于DOM选择。在chrome中,这将显示1而不是2个匹配的元素”我认为这是正确的行为,因为您的选择器过滤器基于属性名-值对,而第二个下拉列表缺少它。Firefox 9和IE 9的行为方式相同。如果我也用CSS编写它,我希望该选择器也会这样做。
querySelectorAll
在标准JS中不可用我知道。你应该有
option.innerHTML=option.value
,而不是相反。最后,这不会按字母顺序排序。我会给你-1表示发布不起作用且无法解决问题的代码。如果你回来修复它,我会给+1。另外,当我看到其他人发布时,我正要进行排序一个指向另一个已回答问题的链接。您想让我一起删除我的答案吗?嗯,什么是
querySelectorAll
?在哪个浏览器中工作?
sortSelect(document.getElementsByName("options"));