dsft8327 2016-03-31 15:23
浏览 33
已采纳

如何只显示循环中的第一个<a>并隐藏所有其他元素?

I am using a function

function recursiveArrayToList($array = array()){
        echo '<ul>';
        foreach ($array as $key => $value) {
            echo '<li><a href="#">' . $key . '</a>';
            if (is_array($value)) {
                recursiveArrayToList($value);
            }
            echo '</li>';
        }
        echo '</ul>';
    }
    echo recursiveArrayToList($array);

that creates a ul list.

I want to hide all elements EXCEPT the first <a>. This should be displayed.

I used this solution to detect the first element:

function recursiveArrayToList($array = array()){
    $first = true;
    echo '<ul>';
    foreach ($array as $key => $value) {
        if ( $first )
        {
           echo "first element, that should be shown";
           $first = false;
        }
        else
        {
           echo "all other elements that should be hidden";
        }
        echo '<li><a href="#">' . $key . '</a>';
        if (is_array($value)) {
            recursiveArrayToList($value);
        }
        echo '</li>';
    }
    echo '</ul>';
}
echo recursiveArrayToList($array);

But now all my elements that do have children get the text "first element that should be shown" not only the first element as expected.


I made a mistake in my question, so to be very clear I will show here what I need:

<ul><---- Show only this element
    <li>farm 
        <ul><---- Do not show
            <li>animals</li>
                <ul><---- Do not show
                    <li>horses</li>
                        <ul>
                            <li>fred</li>
                            <li>sam</li>
                            <li>alan</li>
                            <li>john</li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

And here is my script:

<script>

$(window).load(function(){
    $('li a').click(function (e) {
        e.preventDefault();
        var ullist = $(this).parent().children('ul:first');
        ullist.slideToggle();
    });
});
</script>
  • 写回答

2条回答 默认 最新

  • dongmanzui8486 2016-03-31 15:30
    关注

    CSS

    .hidden {
      display: none;
    }
    

    PHP

    $class = !$first ? "class='hidden'" : "";
    echo '<li ' . $class . '><a href="#">' . $key . '</a>';
    $first = false;
    

    EDIT

    Overall this is what you should have:

    function recursiveArrayToList($array = array(), $first = true){
      echo '<ul>';
      foreach ($array as $key => $value) {
        $class = !$first ? "class='hidden'" : "";
        echo '<li ' . $class . '><a href="#">' . $key . '</a>';
        $first = false;
        if (is_array($value)) {
          recursiveArrayToList($value, false);
        }
        echo '</li>';
      }
      echo '</ul>';
    }
    echo recursiveArrayToList($array);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里