本来一般的列表标签都是直接给点击的li标签修改样式就可以了,直接用if判断语句就是可以的。
但是有的时候项目是别人写的,要来进行bug修复之类的,或者在开发中遇到类似的问题都可以这样解决的,我就是在改别的项目遇到的问题
一:遇到的问题:无法修改li标签的样式,页面刷新样式初始化
这是项目原来的代码块
<ul class="new-list_header main " id="menu">
{dede:type typeid='2'}
<li class="new-list_header_item active"><a href="[field:typeurl/]" target="_self">全部</a></li>
{/dede:type}
{dede:channel type='son' noself='yes' typeid='2'}
<li class="new-list_header_item "><a href="[field:typelink/]" target="_self" title="[field:typename/]类天猫店铺转让">[field:typename/]</a></li>
{/dede:channel}
<!-- <li id="new-list_header_button" class="new-list_header_button "></li> -->
</ul>
这个是直接给每个a标签一个新页面地址,无法使用if判断语句直接修改li标签和a标签的样式,,因为点击每个标签是直接跳转到一个新页面,所有的li标签和a标签都是初始化的,
这个时候试过了给li标签或者a标签增加点击效果,或者用js来控制,但是每次跳转页面都是会进行初始化,样式就会消失,无法定位到点击了的这个标签
在问了多为大佬和搜了很多方法,找到一种解决方法
二:解决方案
因为点击标签是跳转到新的页面,每个页面的URL是不同的,那么每个页面的URL与点击的a标签的URL是相同的,所以使用URL来进行判断定位a标签
HTML页面修改代码:a标签增加class为actives
<ul class="new-list_header main " id="menu">
{dede:type typeid='2'}
<li class="new-list_header_item active"><a href="[field:typeurl/]" target="_self">全部</a></li>
{/dede:type}
{dede:channel type='son' noself='yes' typeid='2'}
<li class="new-list_header_item "><a class="actives" href="[field:typelink/]" target="_self" title="[field:typename/]类天猫店铺转让">[field:typename/]</a></li>
{/dede:channel}
<!-- <li id="new-list_header_button" class="new-list_header_button "></li> -->
</ul>
js代码:
<script>
$(document).ready(function() {
$('#menu li a').each(function() {
/* var aurl = $($(this))[0].href;
console.log(aurl);*/
var aurl = String($($(this))[0].href);
var length = String(window.location).lastIndexOf('');
var url = String(window.location).substring(0,length);
// console.log(aurl);
// console.log(length);
// console.log(url);
if(aurl == url ){
// console.log(1222);
$('#menu li a').removeClass("actives");
$(this).addClass('active');
// console.log(this);
}
});
});
</script>
1.首页给HTML页面列表的a标签添加个class 父类也需添加id
2.这里是给父类ul添加的menu为id,代表菜单列表,a标签是点击标签,
3.先获取a链接的对象,然后进行循环,先取得a链接的href的值 (把url取出作为字符串,所以要加String,再根据长度来进行截取)
4.获取当前页面的URL
5.打印出获取的两个URL值
注意:因为我这个页面的url没带其他的特殊字符,所以直接截取全部,
具体要看实际项目中的地址,如果有特殊字符的需截取没有特殊字符的
比如:
这种不同的,有特殊字符的
var length = String(window.location).lastIndexOf('?');
var url = String(window.location).substring(0,length);
直接截取掉特殊字符即可
6.对两个获取的URL进行对比判断,相同的则把a标签的原有的class值去除,在添加新的class值
7.在对新的class进行样式修改即可实现
实现后的效果
页面URL获取的方式:
var length = String(window.location).lastIndexOf('');
var url = String(window.location).substring(0,length);
关键字:
indexOf("url内特殊字符"):从该字符串开始查找
lastIndexOf("url内特殊字符"):与indexOf方法类似,只不过它是从该字符串的末尾开始查找而不是从开头
(括号内可以是所以字符,具体以实际要截取的url为准)
String:把获取的url值转换为字符串(如果只是比较数字的话换位Number)
具体常用JS——string字符串方法可以到js手册中查看
所有问题都解决完,有不懂的或者有哪里不清楚的可以评论区问