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;";
}
相关文章
相关标签/搜索