代码之家  ›  专栏  ›  技术社区  ›  MrM

我可以在一张桌子上一次显示一行吗?

  •  0
  • MrM  · 技术社区  · 14 年前

    我有一个javascript函数,可以切换表中行的显示。现在的困境是我想一次显示一行。有什么好方法可以做到这一点?

        function optionSelected() {
            var optionSelect = document.getElementById('ddlSelect');
            var strTest = optionSelect.options[optionSelect.selectedIndex].value;            
            var rowHeader = document.getElementById(strTest);
            var row = document.getElementById(strTest);
    
            if (rowHeader.style.display == '') {
                rowHeader.style.display = 'none';
                row.style.display = 'none';
            }
            else {
                rowHeader.style.display = '';
                row.style.display = '';
            }
        }  
    
    
    <select id="ddlSelect" onchange="optionSelected()">
        <option value="optionA">A</option>
        <option value="optionB">B</option>
        <option value="optionC">C</option>
        <option value="optionD">D</option>
    </select>
    
    <table id="tableList">
        <tr id="optionA"><td>DisplayA</td></tr>
        <tr id="optionB"><td>DisplayB</td></tr>
        <tr id="optionC"><td>DisplayC</td></tr>
        <tr id="optionD"><td>DisplayD</td></tr>
    </table>
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   moi_meme    14 年前

    简单的jquery

    $('tr').hide();
    $('#'+strTest).show();
    
        2
  •  0
  •   Marko Dumic    14 年前

    这是您的普通javascript解决方案(尽管我宁愿使用jquery):

    function optionSelected() {
        var sel = document.getElementById('ddlSelect');
    
        for (var i=0; i<sel.options.length; i++) {
            document.getElementById(sel.options[i].value)
                .style.display = sel.options[i].selected ? '' : 'none';
        }
    }​
    

    此外,如果要初始化显示,应调用 optionSelected() 一次在OnLoad处理程序中。

        3
  •  0
  •   Mic    14 年前

    您可以更改样式规则并使用CSS选择器的速度,而不是在DOM节点上循环。

    下面是一个例子,一次显示一行,然后停留。
    如果要在每个选择中删除它们,则可以在每次进行选择时清除样式。

    <body>
        <style id="styles">
            table tr{
                display:none;
            }
        </style>
        <select id="ddlSelect" onchange="optionSelected()">
            <option value="optionA">A</option>
            <option value="optionB">B</option>
            <option value="optionC">C</option>
            <option value="optionD">D</option>
        </select>
    
        <table>
            <tr id="optionA"><td>DisplayA</td></tr>
            <tr id="optionB"><td>DisplayB</td></tr>
            <tr id="optionC"><td>DisplayC</td></tr>
            <tr id="optionD"><td>DisplayD</td></tr>
        </table>
        <script>
            function optionSelected() {
                var optionSelect = document.getElementById('ddlSelect'),
                        styles = document.getElementById('styles'),
                        selector = '#' + optionSelect.options[optionSelect.selectedIndex].value,
                        rule = 'display:block';
                        if(styles.styleSheet){
                            styles.styleSheet.cssText = selector + '{' + rule + '}';
                        }else{
                            styles.appendChild(document.createTextNode(selector + '{' + rule + '}'));
                        }
            }  
        </script>
    </body>