2012-05-08 14 views
4
<ol id="author_list"> 
    <li id="author_8"><div class="author">Author 1</div> 
     <ol> 
      <li class="affiliation_7"><div class="affiliation">School1</div> 
      </li> 

      <li class="affiliation_8"><div class="affiliation">School2</div> 
      </li> 
     </ol> 
    </li> 
    <li id="author_10"><div class="author">Author 3</div> 
     <ol> 
      <li class="affiliation_7"><div class="affiliation">School1</div> 
      </li> 
     </ol> 
    </li> 
    <li id="author_9"><div class="author">Author 2</div> 
     <ol> 
      <li class="affiliation_8"><div class="affiliation">School2</div> 
      </li> 
     </ol> 
    </li> 
</ol> 

のインデックス値を取得しますリストはjson形式で、私は後で同じ順序でリストを再現することができます。jQueryのは、ネストされた順序付きリストをループして、私はこのリストをループのことができるようにとの正確な位置を保存するこの</p> <p><img src="https://i.stack.imgur.com/yQ8qk.png" alt="enter image description here"></p> <p>のように見える各要素

jsonがどのように見えるかはっきりしていませんが、これは私が思いついたものです。ではない私のコード

{ 
    "association1" : { 
     "author": "author_8", 
     "affiliation": { 
      "affiliation_7": "0,0", 
      "affiliation_8": "0,1" 
     }, 
    "association2" : { 
     "author": "author_10", 
     "affiliation": { 
      "affiliation_7": "1,0", 
     }, 
    "association3" : { 
     "author": "author_9", 
     "affiliation": { 
      "affiliation_8": "2,0", 
     },  
} 

。これは、同様のデータを格納するための最良の方法であるかどうかわからこれまで

var indexList = []; 
var level2 = $('#author_list li ol li') 

level2.each(function() { 
    var topIndex = $(this).index(); 
    var subIndex = $(this).parent().parent().index(); 
    indexList.push((topIndex, subIndex));  
    alert(indexList); 
}) 

UPDATE

だけ明確にするために、0,00,1を参照してください。それぞれSchool1およびSchool2のインデックス値に、Author1など

+0

何:

var authors = []; $('#author_list > li').each(function(){ var author = {}; author.id = $(this).attr('id').substring(7); author.name = $(this).find('div.author').text(); author.schools = []; $(this).find('ol li').each(function(){ var school = {}; school.sid = $(this).attr('class').substring(12); school.name = $(this).find('div.affiliation').text(); author.schools.push(school); }); authors.push(author); }); var authorsJson = JSON.stringify(authors); console.log(authorsJson); 

形式の結果は次のようになり0,0を行う0,1および1,0は? –

+0

こんにちは、私の質問を更新しました。そのより明確な希望! – super9

答えて

1

あなたはJSON構造で捕捉された学校の相対的な位置を持っているので、リストを再構成するために学校のインデックス値は本当に必要ありません。ここで

は緩くImdadのスキーマに基づいてJSONを構築するいくつかのjQueryコードです:

[ 
    { 
    "id":"8", 
    "name":"Author 1", 
    "schools":[ 
     {"sid":"7","name":"School1"}, 
     {"sid":"8","name":"School2"} 
    ] 
    }, 
    { 
    "id":"10", 
    "name":"Author 3", 
    "schools":[ 
     {"sid":"7","name":"School1"} 
    ] 
    }, 
    { 
    "id":"9", 
    "name":"Author 2", 
    "schools":[ 
     {"sid":"8","name":"School2"} 
    ] 
    } 
] 
+0

私はあなたの解決策を最後に微調整して行きました。私は 'substring'メソッドを使いたくないので、私はこれを代わりにやっているように、作者とアフィリエーションの' li'にカスタム属性を追加しました: 'author.id = $(this).attr( 'author ') '。ご協力いただきありがとうございます! – super9

1

シンプルです。それを表示する方法は、それを保存する方法です。 IDを分離しておくと、柔軟性が増します。

[ 
{ 
"author": { "id":8, "name":"Author 3"}, 
"schools":[ {"affilication":7,  "school":"School 1"}, 
      {"affilication":8,  "school":"School 2"} 
      ] 
}, 
{ 
"author": { "id":10, "name":"Author 3"}, 
"schools":[ {"affilication":7,  "school":"School 1"}  ] 
}, 
{ 
"author": { "id":9, "name":"Author 2"}, 
"schools":[ {"affilication":8,  "school":"School 2"}  ] 
} 
] 
2
var result = []; 

function getList(element) { 
    $.each($(element).children('li'), function() { 
     var target = $(this), 
      index = target.index(this) + 1, 
      data = $(target).find('div.author').text(), 
      eachObj = {}; 

     eachObj.author = data; 

     if(target.has('ol')) { 
      var aff = {}; 
      $.each($('ol li', target), function() { 
       aff[this.className] = $(this).find('div.affiliation').text(); 
      });  
     } 
     eachObj.affiliation = aff; 
     result.push(eachObj) 
    }); 
    return result; 
} 

getList($('ol#author_list')); 

DEMO

関連する問題

 関連する問題