【问题标题】:Looping through select tags and creating an array or string循环选择标签并创建数组或字符串
【发布时间】:2016-08-27 19:29:33
【问题描述】:

我正在尝试使用以下输出循环选择标签:

"1 dropdown1, 1 dropdown2, 2 dropdown3, 2 dropdown4, 3 dropdown5, 3 dropdown5……"

字符串或数组。

这是我目前所拥有的,但我被困住了

var selects = document.getElementById("getAllRecordsDiv").getElementsByTagName("select");
for(var l = 0; l < selects.length; l++) {
    for (var i = 0; i < 2; i++) {
        var options = i + " " + selects[l].options[selects[l].selectedIndex].text;
    }            
}

    <div id="getAllRecordsDiv" style="border: 2px solid gray; padding: 5px; display: none">        
       <select name="" id="dd1" style="" onchange="">
          <option value="0">one</option>
          <option value="0">two</option>            
       </select>
       <select name="" id="dd2" style="" onchange="">
          <option value="0">three</option>
          <option value="0">four</option>
       </select>
       <select name="" id="dd3" style="" onchange="">
          <option value="0">five</option>
          <option value="0">six</option>            
       </select>
       <select name="" id="dd5" style="" onchange="">
         <option value="0">seven</option>
         <option value="0">eight</option>           
       </select>
    </div>

提前致谢。

【问题讨论】:

    标签: javascript arrays arraylist multidimensional-array


    【解决方案1】:

    经过您的最终解释,我明白您需要什么。如下:

    var selects = document.getElementById("getAllRecordsDiv").getElementsByTagName("select");
    var mainCount = countTo2 = 1;
    var strOptions = '';
    for (var l = 0; l < selects.length; l++) {
        var options = selects[l].getElementsByTagName("option");
        for (var i = 0; i < options.length; i++) {
             var option = mainCount + " " +  options[i].text + ", ";                    
             strOptions += option;
             countTo2++;
             if (countTo2 > 2) {
                countTo2 = 1;
                mainCount++;
             }
        }            
    }
    
    alert(strOptions);
    

    最后一个(我相信)例子在这里:

    https://jsfiddle.net/53j3cgo2/6/

    这里有一个更“高级”的例子供你学习一下:

    function nodeListToArray(nodeList) {
        return Array.prototype.slice.call(nodeList);
    }
    
    var selects = nodeListToArray(document.getElementById("getAllRecordsDiv").getElementsByTagName("select"));
    var cnt = 1;
    var options = '';
    selects.forEach(function(select) {
        nodeListToArray(select.getElementsByTagName("option"))
            .forEach(function(option) {
                options += ((cnt+(cnt % 2))/2)  + " " +  option.text + ", ";                    
                cnt++;
            });
    });
    
    alert(options);
    

    在这里:

    https://jsfiddle.net/53j3cgo2/10/

    可能有更好的方法来做到这一点。我邀请你学习更多关于 JS 对象、AMD 和 IIFE 的知识,好吗? :)

    【讨论】:

    • 感谢尼尔森的帮助。我编辑了我的问题并包含了我正在使用的选择标签。这就是我现在得到的......“0 one1 one0 three1 Three0 Five1 Five0 Seven1 Seven”,但我想要这样“0 一,0 三,1 五,1 七”。
    • 只需将+ ", " 添加到以var option 开头的行的末尾即可。编辑了问题以包含您的请求。我还更改了 jsfiddle 中的示例。
    • 如果错误是顺序,只需反转 for 顺序。像这样:for (var i = 0; i &lt; 2; i++) { for (var l = 0; l &lt; selects.length; l++) {
    • 如此接近..我得到了这个。".0 一、1 一、0 三、1 三、0 五、1 五、0 七、1 七,"但是想要这个" 0 一,0 三,1 五,1 七,”我也可以使用 jquery。谢谢。
    • 正如我上面所说...反转 for 行。
    猜你喜欢
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多