//本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;"; }