我尝试在php中构建导航,并在页面显示时向.active
元素添加<li>
类。我找到了这段代码,它适用于顶级元素,即当所选页面加载时,它会将.active
类应用于<li>
。
<?php
$nav = <<<NAV
<nav id="nav">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/section1/">Section 1</a></li>
<li><a href="/section2/">Section 2</a></li>
</ul>
</nav>
NAV;
$lines = explode("\n", $nav);
foreach ($lines as $line) {
$current = false;
preg_match('/href="([^"]+)"/', $line, $url);
if (substr($_SERVER["REQUEST_URI"], 0, 5) == substr(@$url[1], 0, 5)) {
$line = str_replace('<a h', '<a class="active" h', $line);
}
echo $line."\n";
}
?>
但是,当我向html添加一些子页面时,即使显示父页面,这些子页面也会继承.active
类。同样,如果显示子页面,则父级也会继承.active
类。
<?php
$nav = <<<NAV
<nav id="nav">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/section1/">Section 1</a>
<ul>
<li><a href="/section1/child-page-1">Child Page 1</a></li>
<li><a href="/section1/child-page-2">Child Page 2</a></li>
</ul>
</li>
<li><a href="/section2/">Section 2</a></li>
</ul>
</nav>
NAV;
$lines = explode("\n", $nav);
foreach ($lines as $line) {
$current = false;
preg_match('/href="([^"]+)"/', $line, $url);
if (substr($_SERVER["REQUEST_URI"], 0, 5) == substr(@$url[1], 0, 5)) {
$line = str_replace('<a h', '<a class="active" h', $line);
}
echo $line."\n";
}
?>
有没有办法调整php,只有<li>
到相应的页面继承.active
类。此外,如果.active
元素是孩子,那么父<li>
会获得类似.active-trail
的类名吗?
或者有一种更好的方法可以通过jQuery这样的另一种语言来实现吗?
真的很感激任何帮助。