2011-03-23 65 views
0

我的功能來實現搜索如下。我遇到的問題是我需要跟蹤我必須通過哪些行來查找URL。我正在構建一個導航「小部件」,我需要它根據URL擴展到正確的位置。看到網址可能是N行深度,我需要一種方法來跟蹤它通過的行。如何在json中的多維對象中搜索時跟蹤對象父項?

EG:row [1] .tree.row [3] .tree.row [0],這樣我知道要擴展第二個元素的導航,然後是第四個元素,然後突出顯示第一個元素名單。

問題出在rowNum = rowNum +「x」+ x;我回傳給該函數的。我想我可能會過度疲勞,當我認爲這會奏效的時候,我沒有想到它會通過。

對此提出建議?

謝謝! 我還有一個關於這個功能的問題,但這個問題是不同的。提交額外問題是否是不好的形式?

function lmIntra_LeftNavBuilder_findURL(url) 
{ 

    return lmIntra_LeftNavBuilder_searchJson(jsonLNav.tree[0],url,null); 
}//end findURL 

function lmIntra_LeftNavBuilder_searchJson(tree,url,rowNum) 
{ 
    if(rowNum == null) 
    { 
     rowNum=""; 
    } 
    for(var x=0; x<=tree.rows.length-1;x++) 
    { 

    var cururl = ""; 
     if(typeof tree.rows[x] ==="undefined") 
     { 
      cururl=""; 
     }else 
     { 
      var cururl = tree.rows[x].url; 
     } 
     if(url == cururl) 
     { 
      //return tree.rows[x].title; 
      return rowNum + " treeDepth:"+tree.pos; 
     }//end if 
     else 
      { 

       if(typeof tree.rows[x]!= "undefined") 
       { 
        if(typeof tree.rows[x].tree.rows != "undefined") 
        { 
        rowNum = rowNum+"x"+x; 
         var t = lmIntra_LeftNavBuilder_searchJson(tree.rows[x].tree,url,rowNum); 
         if (t) return t; 
        }//end if 
       }//end if typeof tree.rows[x].tree!= "undefined" 
      }//end else 

    }//end for 


}//end searchJson 

這是一個更簡單的json對象。它完全成型,它沒有深度。完整的一個是38K個字符,所以我會離開它。

var jsonLNav = {itemClassName:"NodeLink",linkClassName:"NodeLinkTitle",linkHideClassName:"HideFromProd",navCategoryClassName:"NavCategory",onLoadJS:"",tree:[{pos:1,wid:"263a97c2-7cb9-470c-bf86-cadc28ae1323",pid:"1",rows:[{hide:0,title:"More IT Help",isNC:0,isMig:0,url:"http://vm-hsspdv-d09p/en-us/Help/Pages/ITHelp.aspx",isOL:0,tree:{pos:2,wid:"263a97c2-7cb9-470c-bf86-cadc28ae1323",pid:"3"}},{hide:0,title:"Office 2010",isNC:0,isMig:1,url:"http://office2010.lmig.com/Pages/Default.aspx",isOL:0,tree:{pos:2,wid:"263a97c2-7cb9-470c-bf86-cadc28ae1323",pid:"9"}},{hide:0,title:"E-mail Management",isNC:0,isMig:0,url:"http://vm-hsspdv-d09p/en-us/Help/EmailManagement/Pages/default.aspx",isOL:0,tree:{pos:2,wid:"8be66348-8da1-4e5c-90c5-0930d2f52d1a",pid:"123"}},]}]}; 
+0

[有作爲JSON對象沒有這樣的事情(http://benalman.com/news/2010/03 /孤單-NO-這樣-東西作爲一種-JSON /)。 – 2011-03-23 23:45:32

+0

@Matt球。謝謝。 – kevingreen 2011-03-24 13:43:16

回答

1

如果你真的想堅持你的方法,但是,我不認爲它真的太遙遠了。如果我知道你想什麼,最大的問題是,你需要做的是這樣的:

if(url == cururl) 
    { 
     rowNum = rowNum+"x"+x; 
     return rowNum + " treeDepth:"+tree.pos; 
    } 
+0

這是如何跟蹤每個行號是否回來?我承認我對遞歸的理解很薄弱,我現在也在家,無法訪問源代碼來試試這個。 – kevingreen 2011-03-24 01:49:29

+0

它不在備份的路上.. 。它跟蹤它們,然後只是返回它們。我對你給出的示例樹進行了小小的擴展,它將行號作爲字符串的一部分返回。你可能也可以傳遞一個數組而不是字符串作爲你的rowNum變量,並在你去的時候將新的值推送到那個變量上。 – joelt 2011-03-25 00:30:59

1

假設樹中存在的東西都映射到DOM中存在的東西,對吧?我認爲最明智的選擇是停止遍歷這個對象來找到你想要的,使用像選擇器引擎一樣的庫來選擇你想要的節點,然後使用這個庫來遍歷DOM。即使在沒有庫的情況下遍歷DOM也許會更容易。

+0

每個對象都映射到DOM中的某些內容,但尚未創建。該功能是構建DOM的更大功能的一部分。所以很不幸,我不能這樣做。我需要的是一種獲取JSON對象中父項的方法。另外,由於在我加入公司之前做出的設計選擇,我無法使用Jquery。它與其他代碼不兼容,所以它沒有在這個項目中使用:(現在無論如何,我會盡量在稍後修復它,但這可能是一個大項目。 – kevingreen 2011-03-24 01:29:54