0

我有一个生成嵌套导航菜单的函数:

function recursive_foreach($array, $display) {
    $out = '<ul>';
    foreach ($array as $key => $value) {
        ... 
        $out .= '<li class="'. $is_active . $is_parent . '"><a href="' . $url . '">' . $value['name'] . '</a>'; }   
        if (is_array($value['has_children'])) { 
            $out .= recursive_foreach( ...
        }
        $out .= "</li>";
    }   
    $out .= '</ul>';    
    return $out;    
}

我想将 css 类添加到第一个“ul”元素。我知道如何确定 foreach 循环中的第一个元素,但我怎样才能将它排除在外?

4

5 回答 5

2

您可以使用 CSS 选择器:first-child( MDN ) 或:first-of-type( MDN ) 来定位相应的<ul>元素,因此您不需要向该元素添加特定的类。

于 2012-07-12T12:40:39.547 回答
2

最好传递一个适当的参数:

function recursive_foreach($array, $display, $first = true) {
    ...
    recursive_foreach($foo, $bar, false);
    ...
}
于 2012-07-12T12:41:28.157 回答
2

您可以使用:first-childCSS 选择器。:)

所以,你的 CSS 应该是这样的:

ul li:first-child { /* CSS Code */ }

它兼容:

  • 浏览器 7+
  • 火狐
  • 铬合金
  • 苹果浏览器

因为您可以使用纯 CSS 来定位它,而无需更改标记!:)

于 2012-07-12T12:41:31.473 回答
1

通常第一个$key为零,因此您可以检查该条件:

$first = $key === 0;

如果您的第一个密钥不同,请使用第一个密钥:

$first = $key === $firstKey;

如果您的第一个密钥发生更改,请先获取它:

list($firstKey) = array_keys($array);

希望这会有所帮助。

在 CSS 本身中,您也可以只使用:first-child伪类CSS2。所以不需要为各种浏览器添加一个类Browser Support

于 2012-07-12T12:40:26.463 回答
1

:first-child很好,但并不完全兼容。

于 2012-07-12T12:41:33.967 回答