//本js能夠在chrome瀏覽器導出的書籤(html文件)中檢查是否有[url徹底相同]的重複書籤,並加以提示。 var bookmarkArr=[]; //全部書籤 var bookmarkUrlArr=[]; //書籤中全部的url var bookmarkUrlArrSort=[]; //將書籤url排序 var duplicatebookmarkArr=[]; //存儲重複的書籤 var duplicatebookmarkIndexArr=[]; //存儲重複書籤的索引信息 if(document.getElementsByTagName("dl")[1].childNodes[0].nodeName==="P"){ //先刪除一個不須要的元素(就是一個空的p標籤) document.getElementsByTagName("dl")[1].removeChild(document.getElementsByTagName("dl")[1].childNodes[0]); } var allBlock=document.getElementsByTagName("dl")[1].childNodes; //獲取書籤欄中的全部區塊(按文件夾) 。這裏實際上獲取到的是root中全部的[直接子dt標籤] var blockLength=allBlock.length; //區塊的數量 //查找指定書籤所在文件夾的名字 function getDirName (e) { if(e.parentNode.firstChild.nodeName==="H3"){ fullDirName=e.parentNode.firstChild.innerHTML+"\\"+fullDirName; if(e.parentNode.firstChild.innerHTML!=="書籤欄"){ return getDirName(e.parentNode); }else{ return fullDirName; } }else{ return getDirName(e.parentNode); } } //存儲全部書籤和書籤中全部的url for(var i=0;i<allBlock.length;i++){ var nowList=allBlock[i].getElementsByTagName("a"); //獲取當前區塊全部書籤條目(這是最細的層級了 var nowBookmarkLength=nowList.length; //當前區塊裏書籤的數量 for(var ii=0;ii<nowBookmarkLength;ii++){ var fullDirName=""; bookmarkArr.push({ "url":nowList[ii].href, //保存當前書籤的url "title":nowList[ii].innerHTML, "dir":getDirName(nowList[ii]), "x":i, //保存索引1,即該書籤在第幾個區塊上 // "y":ii //保存索引2,即該書籤在該區塊上的索引 }); bookmarkUrlArr.push(nowList[ii].href); } } //查找重複項並將其儲存到[重複書籤]的數組中 var bookmarkUrlArr2=[]; //因爲sort直接將排序後的結果保存到原數組,所以咱們須要建立一個副原本進行排序操做 for(var i=0;i<bookmarkUrlArr.length;i++){ bookmarkUrlArr2[i]=bookmarkUrlArr[i]; } bookmarkUrlArrSort=bookmarkUrlArr2.sort(); for(var i=0;i<bookmarkUrlArrSort.length;i++){ if(bookmarkUrlArrSort[i]===bookmarkUrlArrSort[i+1]){ //將[url徹底相同]的書籤視爲重複書籤。注意,若是某個url徹底相同的書籤出現屢次,那麼下面的操做會執行[出現次數-1]次,這樣將會致使[重複書籤]中該書籤被記錄屢次 duplicatebookmarkArr.push(bookmarkUrlArrSort[i]); } } if(duplicatebookmarkArr.length===0){ alert("檢查完畢,您的書籤沒有重複的項目~"); }else{ //刪掉[重複書籤]數組中的可能出現的重複項 duplicatebookmarkArr.sort(); for(var i=0;i<duplicatebookmarkArr.length;i++){ if(duplicatebookmarkArr[i]===duplicatebookmarkArr[i+1]){ duplicatebookmarkArr.splice(i,1); } } //存儲重複書籤的索引信息,包含重複項的url和它每次出現的的位置 for(var i=0;i<duplicatebookmarkArr.length;i++){ duplicatebookmarkIndexArr.push({ "url":duplicatebookmarkArr[i], "index":[] }); for(var ii=0;ii<bookmarkUrlArr.length;ii++){ if(duplicatebookmarkArr[i]===bookmarkUrlArr[ii]){ duplicatebookmarkIndexArr[i].index.push(ii); } } } //輸出結果到新窗口 var newWindow=window.open(); newWindow.document.writeln("<h2>"+"檢查完畢,有"+duplicatebookmarkArr.length+"個URL含有重複的書籤。"+"</h2>"); for(var i=0;i<duplicatebookmarkArr.length;i++){ newWindow.document.writeln("<h3>URL-"+(i+1)+":"+"<input type='text' value="+duplicatebookmarkArr[i]+" style='width:80%;border:#ddd 1px solid' onmouseover='this.select()' />"+"</h3>"); for(var ii=0;ii<duplicatebookmarkIndexArr[i].index.length;ii++){ newWindow.document.writeln("標題:"+bookmarkArr[duplicatebookmarkIndexArr[i].index[ii]].title+"</br>"); newWindow.document.writeln("位於:"+bookmarkArr[duplicatebookmarkIndexArr[i].index[ii]].dir+"</br>"); } newWindow.document.writeln("<hr/>"); } newWindow.document.body.style.cssText="font-family:'Microsoft Yahei';font-size:14px;"; }