nextSibling ul li ul

时间:2012-08-30 12:23:15

标签: javascript nextsibling

我不确定,但如果我理解正确的js nextSibling关注下一个节点?那么,为什么我会遇到麻烦,当我想在李中选择ul?

    <ul>
<li><input id="btn-page" type=button onclick="displayMenu();" /></li>
    <ul class="hide">
        <li>Some text</li>
    </ul>
    <li>...</li>
   </ul>

我的js功能:

    function displayMenu() {
   var idMenu = event.target.id;
   var ulDisplay = document.getElementById(idMenu).nextSibling;
   ulDisplay.style.display = 'block';
}

我想我忘记了什么,但我不知道为什么。感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

由于@andreas指出HTML的结构无效,因为您不能拥有UL作为UL的子级。但是你可以拥有UL作为LI的孩子。因此,请考虑以这种方式更新HTML。帮助函数“Next()”来自之前用于查找UL的类似答案Hide an element's next sibling with Javascript

<!DOCTYPE html>
<html>
    <head>
        <style type="text/css">
            .hide { display: none; }
        </style>
        <title>Title</title>
        <script type="text/javascript">
            function next(elem) {
                do {
                    elem = elem.nextSibling;
                } while (elem && elem.nodeType != 1);
                return elem;                
            }

            function displayMenu(id) {
                var ulDisplay = next(document.getElementById(id));
                ulDisplay.style.display = 'block';
            }
        </script>
    </head>
    <body>
        <ul>
            <li>
                <input id="btn-page" value="show" type=button onclick="displayMenu(this.id);" />
                <ul class="hide"><li>Some text</li></ul>
            </li>
            <li>...</li>
        </ul>
    </body>
</html>

答案 1 :(得分:0)

这种方式似乎更好。

HTML

<ul>
 <li>
  <input id="btn1" type='button' onclick="displayMenu(event);" />
 </li>
 <li><ul id="page1" style="display: none" class="hide">
  <li>Some text</li>
 </ul></li>
 <li>...</li>
</ul> <

JS

function displayMenu(event) {
    var id = event.target.id.substring(3);
    var ulDisplay = document.getElementById("page" + id);
    ulDisplay.style.display = "block";
}