本来一般的列表标签都是直接给点击的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值

jquery修改a标签的src jquery修改a标签的文字_a标签

注意:因为我这个页面的url没带其他的特殊字符,所以直接截取全部,

具体要看实际项目中的地址,如果有特殊字符的需截取没有特殊字符的

比如:

 

jquery修改a标签的src jquery修改a标签的文字_jquery修改a标签的src_02

 这种不同的,有特殊字符的

var length = String(window.location).lastIndexOf('?');
 var url = String(window.location).substring(0,length);

 直接截取掉特殊字符即可

6.对两个获取的URL进行对比判断,相同的则把a标签的原有的class值去除,在添加新的class值

7.在对新的class进行样式修改即可实现

实现后的效果

jquery修改a标签的src jquery修改a标签的文字_javascript_03

页面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手册中查看

所有问题都解决完,有不懂的或者有哪里不清楚的可以评论区问