chrome書籤重複檢測

//本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;";
}
相關文章
相關標籤/搜索