Обход неупорядоченных списков с использованием Javascript / Jquery - PullRequest
1 голос
/ 01 июля 2010

Допустим, у меня есть неупорядоченный вложенный список:

<ul>
   <li>Item a1</li>
   <li>Item a2</li>
   <li>Item a3</li>
       <ul>
           <li>Item b1</li>
           <li>Item b2</li>
           <li>Item b3</li>
            <ul>
               <li>Item c1</li>
               <li>Item c2</li>
               <li>Item c3</li>             
            </ul>
           <li>Item b4</li>
       </ul>
  <li>Item a4</li>
</ul>

Мне нужно пройти его и сохранить в двухмерном массиве (в конечном счете, я просто пытаюсь преобразовать его в объект JSON). Мне разрешено использовать оба Jquery И / ИЛИ JavaScript. Как мне поступить?

Спасибо

Ответы [ 3 ]

2 голосов
/ 01 июля 2010

Я не совсем уверен, как вы хотите, чтобы полученная структура данных выглядела, но вот это (в котором используется некоторый jQuery):

$(function() {

    var result = {};

    function createNewLevel(parent,items) {
        var length = items.length;
        for(var i = 0; i < length; i++) {
            if(items[i].tagName == 'UL') {
                parent['ul' + i] = {};
                createNewLevel(parent['ul' + i],$(items[i]).children().get());
            } else {
                parent['li' + i] = $(items[i]).text();
            }
        }
    }

    createNewLevel(result, $('ul:first').get());

    console.log(result);

});

... создаст эту структуру

{
    ul0: {
        li0: "Item a1",
        li1: "Item a2",
        li2: "Item a3",
        li4: "Item a4",
        ul3: {
            li0: "Item b1",
            li1: "Item b2",
            li2: "Item b3",
            li4: "Item b4",
            ul3: {
                li0: "Item c1",
                li1: "Item c2",
                li2: "Item c3"
            }
        }
    }
}

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

Обратите внимание, что это объект javascript. Если вам действительно нужен JSON-объект, вам просто нужно конвертировать его, используя var jsonResult = JSON.stringify( result );

2 голосов
/ 01 июля 2010
function traversing(ul)
{
     for(var index=0;index<ul.childNodes.length;index++){
          if(ul.childNodes[index].childNodes.length>0){
              traversing(ul.childNodes[index]);
          }
          //perform other operation
     }
}
0 голосов
/ 01 июля 2010

С JQuery попробуйте:

$.each($("li"), function(index, value) { 
  alert(value); 
});
...