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;    
}

最初の「ul」要素だけにcssクラスを追加したいと思います。foreachループ内の最初の要素を特定する方法は知っていますが、ループ外にするにはどうすればよいですか?

4

5 に答える 5

2

CSSセレクター:first-childMDN)または:first-of-typeMDN)を使用してそれぞれの要素をターゲット<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 */ }

それは互換性があります:

  • IE 7+
  • Firefox
  • クロム
  • サファリ

Pure CSSを使用してターゲットを設定でき、マークアップを変更する必要がないためです。:)

于 2012-07-12T12:41:31.473 に答える
1

通常、最初$keyはゼロなので、その状態を確認できます。

$first = $key === 0;

最初のキーが異なる場合は、最初のキーを使用します。

$first = $key === $firstKey;

最初のキーが変更された場合は、最初にそれを取得します。

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

これがお役に立てば幸いです。

CSS自体では、:first-child疑似クラスCSS2を使用することもできます。したがって、さまざまなブラウザのブラウザサポート用のクラスを追加する必要はありません。

于 2012-07-12T12:40:26.463 に答える
1

:first-childは素晴らしいですが、完全に互換性があるわけではありません。

于 2012-07-12T12:41:33.967 に答える