Ярлыки XML jQuery - PullRequest
       11

Ярлыки XML jQuery

0 голосов
/ 26 апреля 2010

Я пишу немного кода, который добавляет навигацию к моему сайту и дополнительный ul, который дает описание того, куда ведет вас эта ссылка.Мне нужно использовать встроенную в нашу CMS структуру CMS, поэтому добавление через jQuery было лучшим решением, а XML облегчает управление данными.У меня такой вопрос: есть ли более эффективный способ выписать JS?Пока что у меня есть следующее:

$(document).ready(function()
{
 $.ajax({
  type: "GET",
  url: "/js/sitenav.xml",
  dataType: "xml",
  success: function  parseXml(xml) {
  // WORK
   $(xml).find("CaseStudies").each(function()
    {
     $("li#case_studies").append('<ul><li>' + $(this).find("NavImage").text() + $(this).find("NavHeader").text() + $(this).find("NavDescription").text() + $(this).find("NavLink").text()  + "</li></ul>");
    });
   };
 });
});

и структура xml похожа на это:

<SiteNav>
 <Work>
        <CaseStudies>
            <NavImage></NavImage>
         <NavHeader></NavHeader>
         <NavDescription></NavDescription>
         <NavLink></NavLink>
        </CaseStudies>
    </Work>
</SiteNav>

Я доволен своей структурой xml, но есть ли более компактная / эффективнаяспособ выписать код для JQuery?Каждый ли в навигации имеет уникальный идентификатор, если это помогает ...

1 Ответ

0 голосов
/ 26 апреля 2010

Поскольку вы просто добавляете текст в том же порядке, в каком он встречается в документе xml, вы можете сделать это:

var cs = $("li#case_studies"); //Cache the <li> reference
$(xml).find("CaseStudies").each(function() {
  cs.append('<ul><li>' + $(this).children().text() + "</li></ul>");
});​

Это кэширует ссылку на li#case_studies, поэтому вы не перебираете DOM каждый раз, когда находите его. Кроме того, вы выполняете в четыре раза больше обходов XML в цикле, так как вы просто просматриваете дочернюю коллекцию один раз вместо 4-х.

Это работает только как оптимизация, если порядок элементов в XML совпадает с тем, который вы хотите, исходя из вашего вопроса, просто помните об этом на случай, если это может измениться.

Вы можете увидеть пример кода выше, работающего здесь.

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