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 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数