在一些網站上看到多彩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 }
最后效果