Попытка получить доступ к меню JSON в другой функции для построения левой боковой навигации - PullRequest
0 голосов
/ 12 сентября 2009

Я относительно новичок в Jquery и JSON, и это мой первый пост здесь, пожалуйста, потерпите меня.

У меня есть строка меню JSON с массивом из трех элементов (name, url, id - наш внутренний идентификатор страницы), и навигация верхнего уровня строится нормально. Я перебираю элементы верхнего уровня и вызываю рекурсивную функцию, чтобы получить подменю.

То, что я сейчас пытаюсь сделать, находится в отдельной части веб-страницы, используйте строку меню JSON, чтобы найти страницу верхнего уровня (например, news.aspx) и создайте меню для этой страницы и ее подменю. элементы, отображаемые в левой части навигации, которые отображаются только на страницах новостей.

Проблема, с которой я столкнулся, заключается в том, что приведенный ниже скрипт работает без каких-либо ошибок Javascript, однако он использует навигацию верхнего уровня. Навигация верхнего уровня в сущности вызывается одинаково, за исключением функций CreateMenu () и CreateMenuRecursive ().

Часть кода, который я здесь использую, я получил, прочитав другие посты на этом сайте, но я не нашел ответа на этот вопрос. Заранее благодарю за любую помощь.

<div id="LeftNavDiv">&nbsp;</div> 

<script type="text/javascript">
$(function(){   
var sidemenuString = CreateSideMenu();
$("#LeftNav").html(sidemenuString);
});

function CreateSideMenu(){
$.get("menu");
var sidenavHTML = new Sys.StringBuilder();
for(var i=0; i < menu.MenuItem.length; i++){
    if(menu.MenuItem[i].id == 'a123456'){
        CreateSideMenuRecursive(menu.MenuItem[i],sidenavHTML);
    }
}
return sidenavHTML.toString();
}

function CreateSideMenuRecursive(item, outputHTML){
if(item.MenuItem == null || item.MenuItem.length == 0)
return;

outputHTML.append("<ul>");
for(var i=0; i < item.MenuItem.length; i++){
    if(item.MenuItem[i].id == CurrentPageID){
        outputHTML.append("<li><a href='" + item.MenuItem[i].url + "'>" + item.MenuItem[i].label + "</a>");
    } 
    CreateSideMenuRecursive(item.MenuItem[i], outputHTML);
    outputHTML.append("</li>");
}
outputHTML.append("</ul>");
}
</script>

1 Ответ

0 голосов
/ 18 сентября 2009

Как оказалось, я делал это слишком сложно. Все, что мне нужно было сделать, это найти href (news.aspx) в строке меню JSON и получить подменю. Я взял то, что у меня было выше, и разобрал это до следующих нескольких строк кода:

<div id="LeftNavDiv"></div>
<script type="text/javascript">
$(function(){   
var sidemenu = $("a[href$='news.aspx']").next("ul").get();
$("#LeftNavDiv").html(sidemenu);    
});
</script>

Он динамически создает этот div и неупорядоченный список, вытягивая даже стиль, то есть «menu-top» из строки меню JSON:

<div id="LeftNavDiv">
    <ul>
        <li class="menu-top"/>
        <li><a href="sandbox1.aspx">Lorem ipsum</a></li>
        <li class="menu-bot"/>
   </ul>
</div>
...