页面加载后添加活动 class
Add active class after page load
我一直在为 wordpress 网站开发自定义菜单。这就是为什么我不能对活动菜单项使用标准的 worpress 选择器。我想在活动link中添加一个活动class。这是我的 html:
<div class="nav">
<ul id="menu">
<li><a href="/item1">item1</a></li>
<li><a href="/item2">item2</a></li>
<li><a href="/item3">item3</a></li>
</ul>
这是我的 jQuery:
$(document).ready(function() {
$('div.nav ul#menu li a').on('click', function(event) {
$(this).addClass('active');
});
});
一切正常,它添加了 class,但随后页面重新加载并删除了 class。有没有办法在刷新页面时将 class 添加到活动元素?提前致谢!
几种方式。将信息存储在 localStorage
或 cookie 中,或通过哈希将其附加到 URL。
这是哈希方法。单击时,我们将单击的 li
的索引附加到哈希,例如my_page.html#3
.
$(function() {
//grab menu and listen for clicks...
var menu = $('div.nav ul#menu');
menu.on('click', 'li a', function() {
//...highlight, and log parent LI's index in URL hash
$(this).addClass('active');
location.hash = $(this).closest('li').index();
});
//onload, auto-highlight a previously-selected link? Trigger a click on it if so.
var active_onload = location.hash.replace(/^#/, '');
if (active_onload) menu.find('li:nth-child('+active_onload+') a').trigger('click');
});
然后,在 DOM 准备就绪时,我们检查散列以查看是否需要突出显示之前选择的那个。
这假定散列不用于页面中的内部链接。如果是,localStorage
方法(使用相同的原则,但存储在 localStorage
而不是 URL 哈希中)会更好。
试试这个,
<div class="nav">
<ul id="menu">
<li><a href="/item1" class="active">item1</a></li>
<li><a href="/item2">item2</a></li>
<li><a href="/item3">item3</a></li>
</ul>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
document.onreadystatechange = function(){
var selected_parent;
if(document.readyState === 'interactive'){
selected_parent = $('#menu').children().find('a').filter('.active').parent('li').index();
jQuery.data( document.body, "selected_parent", selected_parent);
}
if(document.readyState === 'complete'){
var selected_parent = jQuery.data( document.body, "selected_parent" );
$('#menu').children('li:eq('+selected_parent+')').children('a').addClass('active');
}
}
</script>
我一直在为 wordpress 网站开发自定义菜单。这就是为什么我不能对活动菜单项使用标准的 worpress 选择器。我想在活动link中添加一个活动class。这是我的 html:
<div class="nav">
<ul id="menu">
<li><a href="/item1">item1</a></li>
<li><a href="/item2">item2</a></li>
<li><a href="/item3">item3</a></li>
</ul>
这是我的 jQuery:
$(document).ready(function() {
$('div.nav ul#menu li a').on('click', function(event) {
$(this).addClass('active');
});
});
一切正常,它添加了 class,但随后页面重新加载并删除了 class。有没有办法在刷新页面时将 class 添加到活动元素?提前致谢!
几种方式。将信息存储在 localStorage
或 cookie 中,或通过哈希将其附加到 URL。
这是哈希方法。单击时,我们将单击的 li
的索引附加到哈希,例如my_page.html#3
.
$(function() {
//grab menu and listen for clicks...
var menu = $('div.nav ul#menu');
menu.on('click', 'li a', function() {
//...highlight, and log parent LI's index in URL hash
$(this).addClass('active');
location.hash = $(this).closest('li').index();
});
//onload, auto-highlight a previously-selected link? Trigger a click on it if so.
var active_onload = location.hash.replace(/^#/, '');
if (active_onload) menu.find('li:nth-child('+active_onload+') a').trigger('click');
});
然后,在 DOM 准备就绪时,我们检查散列以查看是否需要突出显示之前选择的那个。
这假定散列不用于页面中的内部链接。如果是,localStorage
方法(使用相同的原则,但存储在 localStorage
而不是 URL 哈希中)会更好。
试试这个,
<div class="nav">
<ul id="menu">
<li><a href="/item1" class="active">item1</a></li>
<li><a href="/item2">item2</a></li>
<li><a href="/item3">item3</a></li>
</ul>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
document.onreadystatechange = function(){
var selected_parent;
if(document.readyState === 'interactive'){
selected_parent = $('#menu').children().find('a').filter('.active').parent('li').index();
jQuery.data( document.body, "selected_parent", selected_parent);
}
if(document.readyState === 'complete'){
var selected_parent = jQuery.data( document.body, "selected_parent" );
$('#menu').children('li:eq('+selected_parent+')').children('a').addClass('active');
}
}
</script>