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 形式で保存できるようにして、後で同じ順序でリストを再現できるようにしたいと考えています。

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);
})

アップデート

明確にするために、 、0,00,1のインデックス値を参照し、School1それぞれSchool2の下Author1など

4

3 に答える 3

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'));

デモ

于 2012-05-08T07:35:40.213 に答える
1

学校の相対的な位置が JSON 構造に取り込まれているため、リストを再構築するために学校のインデックス値は実際には必要ありません。

以下は、Imdad のスキーマに基づいて大まかに JSON を構築する JQuery コードです。

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);

フォーマットされた結果は次のようになります。

[
  {
    "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"}
    ]
  }
]
于 2012-05-08T07:15:09.057 に答える