我只是想知道什麼是使用超級插件插件時突出顯示當前選定菜單的更「非硬編碼」方法。Superfish jquery插件,突出顯示所選菜單項
例如這一個http://hicksdesign.co.uk/journal/highlighting-current-page-with-css看起來非常「硬編碼」的做法。
可能有人會建議更聰明的東西嗎?
我只是想知道什麼是使用超級插件插件時突出顯示當前選定菜單的更「非硬編碼」方法。Superfish jquery插件,突出顯示所選菜單項
例如這一個http://hicksdesign.co.uk/journal/highlighting-current-page-with-css看起來非常「硬編碼」的做法。
可能有人會建議更聰明的東西嗎?
不幸的是,除非您使用動態語言來渲染頁面,否則很難爲此提供整潔的解決方案。
一種可能性是使用錨的href
屬性,該屬性將等於window.location.pathname
字符串的一部分。例如,假設您的網站位於服務器的根目錄,其HTML頁面名爲index.html
,work.html
等。然後,您可以抓取pathname
(域名後面的URL部分)並將其與該域名匹配錨的href
屬性。
您的導航看起來是這樣的:
<nav>
<ul>
<li><a href="index.html">Index</a></li>
<li><a href="work.html">Work</a></li>
<li><a href="projects.html">Projects</a></li>
<li><a href="hobbies.html">Hobbies</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
而JavaScript看起來是這樣的:
var pathname = window.location.pathname;
// trim the first slash
var substr = pathname.substr(1);
$('nav').find('li a[href="' + substr + '"]').addClass('current');
所以,當你在index.html
,變量substr
等於index.html
,所以data-page-name
等於index.html
的列表項得到類current
。
此解決方案是可以的,因爲您只需要一個導航樹,因爲您不必編輯每個頁面向元素添加ID或類。你做如果你改變一個文件名,儘管你必須改變每個文件中的data-page-name
屬性(儘管你必須改變錨點href
),發現自己陷入一片混亂。
這就是我通常的做法 - 獲取當前頁面在URL的最後/之後並突出顯示與之相匹配的鏈接。例如。這個頁面將將返回superfish-jquery-plugin-highlight-selected-menu-item
var path = location.pathname.substring(location.pathname.lastIndexOf("/") + 1);
$('ul#main-navigation li a[href="' + path + '"]').addClass('active');
而不是添加「活動」類的,我加入了「sfHover」類和去除的默認設置hoverClass:從plugins.js文件或者插件被初始化「sfHover」使用默認設置 –