为我的博客园做一个多彩tag

在一些网站上看到多彩tag,觉得很好看,就像着给自己的博客做一个,做之前是这样的

单一且枯燥,先来看看这里的结构代码

于是,为了做出多彩字,我在博客的自定义js里添加了这样的代码

 1 $(".catListTag a").each(function(index,element){
 2     //color
 3     var color = "";
 4     for(var i = 0;i<3;i++){
 5         var d = Math.floor(Math.random() * 255);
 6         var h = Number(d).toString(16);
 7         if(h.length<2){
 8             h = "0" + h;
 9         }
10         color += h;
11     }
12     color = "#" + color;
13     //console.log(color);
14     $(this).css("color",color);
15     //size
16     var s = Math.floor(Math.random()*5+12);
17     var size = s + "px";
18     $(this).css("font-size",size);
19 });

很不幸,没有成功,经过调试发现,选择器$(".catListTag a")根本没有查找到元素,这是怎么回事呢?通过翻看博客园的部分源代码找到了原因

没错,就像你看到的这样,这一块节点是在ajax请求完成之后通过js动态添加上去的,而我的自定义js代码,绝对要在ajax请求完成之前就执行完了,当然就查找不到任何匹配的元素,怎么办呢?

这个问题困扰了我很久,博客园的代码我是不可能改的,不然在后面稍微加点代码就OK了,可事实是不能改。最后,得高人指点(QQ群里的不好留名),想到可以覆写回调方法,但这里回调方法是匿名方法,所以不能直接覆写回调方法,只有间接的覆写loadBlogSideBlocks方法,于是我讲原来的loadBlogSideBlocks的代码拷贝出来写在自定义的js里,方法结束前加上自己的代码,终于成功了

 1 function loadBlogSideBlocks() {
 2     var n = [];
 3     document.getElementById("RecentCommentsBlock") && n.push("ShowRecentComment");
 4     document.getElementById("TopViewPostsBlock") && n.push("ShowTopViewPosts");
 5     document.getElementById("TopFeedbackPostsBlock") && n.push("ShowTopFeedbackPosts");
 6     document.getElementById("TopDiggPostsBlock") && n.push("ShowTopDiggPosts");
 7     $.ajax({url: "/mvc/Blog/GetBlogSideBlocks.aspx",data: {blogApp: currentBlogApp,showFlag: n.join(",")},type: "get",dataType: "json",success: function(n) {
 8             n && (n.RecentComments ? $("#RecentCommentsBlock").html(n.RecentComments) : $("#recent_comments_wrap").hide(), n.TopViewPosts ? $("#TopViewPostsBlock").html(n.TopViewPosts) : $("#topview_posts_wrap").hide(), n.TopFeedbackPosts ? $("#TopFeedbackPostsBlock").html(n.TopFeedbackPosts) : $("#topfeedback_posts_wrap").hide(), n.TopDiggPosts ? $("#TopDiggPostsBlock").html(n.TopDiggPosts) : $("#topdigg_posts_wrap").hide())
 9         }})
10         
11         //my code
12         
13         $(".catListTag a").each(function(index,element){
14             //color
15             var color = "";
16             for(var i = 0;i<3;i++){
17                 var d = Math.floor(Math.random() * 255);
18                 var h = Number(d).toString(16);
19                 if(h.length<2){
20                     h = "0" + h;
21                 }
22                 color += h;
23             }
24             color = "#" + color;
25             //console.log(color);
26             $(this).css("color",color);
27             //size
28             var s = Math.floor(Math.random()*5+12);
29             var size = s + "px";
30             $(this).css("font-size",size);
31         });
32 }

最后效果

原文地址:https://www.cnblogs.com/lvyahui/p/4296369.html