Как я могу отследить родителей объектов при поиске в многомерном объекте в json? - PullRequest
0 голосов
/ 24 марта 2011

Моя функция для осуществления поиска ниже. У меня проблема в том, что мне нужно отследить, через какие строки мне нужно пройти, чтобы найти URL. Я создаю навигационный «виджет», и мне нужно, чтобы он расширился до нужного места на основе URL. Поскольку URL может быть N строк глубиной, мне нужен метод для отслеживания строк, через которые он прошел.

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. Он полностью сформирован, у него просто нет глубины. Полный текст содержит 38 тыс. Символов, поэтому я его опущу.

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"}},]}]}; 

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Если вы действительно хотите придерживаться подхода, который у вас есть, я не думаю, что он действительно слишком далек. Если я понимаю, что вы хотите, самая большая проблема заключается в том, что вам нужно сделать что-то вроде:

    if(url == cururl )
    {
        rowNum = rowNum+"x"+x;
        return  rowNum + " treeDepth:"+tree.pos;
    }
1 голос
/ 24 марта 2011

Предположительно, все, что существует в этом дереве, соответствует чему-то, что существует в DOM, верно?Я думаю, что наиболее разумным вариантом было бы прекратить обходить этот объект, чтобы найти то, что вы хотите, использовать библиотеку, такую ​​как jQuery с механизмом выбора, чтобы выбрать нужный вам узел, а затем использовать указанную библиотеку для обхода DOM.Даже обход DOM без библиотеки может быть проще для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...