1

次のような複数のdivの順序付けされていないリストから複数の属性を取得しようとしています。

    <div class="graph" style="display:none;">
        <ul g-max='10'>
            <li g-color='green' g-val='4'></li>
            <li g-color='blue' g-val='3.6'></li>
            <li g-color='red' g-val='8'></li>
        </ul>
    </div>

    <div class="graph" style="display:none;">
        <ul g-max='14'>
            <li g-color='green' g-val='2'></li>
            <li g-color='blue' g-val='9'></li>
            <li g-color='red' g-val='3.98'></li>
        </ul>
    </div>

私はjQueryでこれを行おうとしていますが、次のものを使用しています。

    var graph_array = [];

    $('.graph').each(function(divind)
    {
          $('ul').each(function(ulind)
          {
               $('li').each(function(liind)
               {
                     graph_array[divind][ulind][liind]['g-val'] = $(this).attr('g-val');
                     graph_array[divind][ulind][liind]['g-color'] = $(this).attr('g-color');
               });
          });
    });
    alert(graph_array);

しかし、物事を動かして、やなどのさまざまなテクニックを試して.map().toArray()、何も機能しません。何か案は?前もって感謝します!

編集:私は次のような最終結果が欲しいです:

    [{
       {
         {g-color:green, g-val:4},{g-color:blue, g-val:3.6},{g-color:red, g-val:8}
       },
       {
         {g-color:green, g-val:2},{g-color:blue, g-val:9},{g-color:red, g-val:3.98}
       }
    }]
4

3 に答える 3

2

アレイをインスタンス化するか、事前に入力する必要があります。このように、例えば:

var graph_array = [];
$('.graph').each(function(divind, e)
{
      $(e).find('ul').each(function(ulind, e)
      {
           $(e).find('li').each(function(liind, e)
           {
               // create level 1 sub-array, or use existing
               var level1 = (graph_array[divind] || (graph_array[divind] = []));

               // create or re-use level #2 sub-array
               var level2 = (level1[ulind] || (level1[ulind] = []));

               // create a property map
               var map = (level2[liind] = {});
               map ['g-val'] = $(e).attr('g-val');
               map ['g-color'] = $(e).attr('g-color');
           });
      });
});
// display as a string
alert(JSON.stringify(graph_array));​

実用的な例については、こちらをご覧ください:http: //jsfiddle.net/Q57W5/5/

于 2012-10-20T20:41:45.637 に答える
1

ここで注意すべき主なことは、追加しようとしているアレイを初期化していないことです。グループごとに配列を初期化する必要があります。ここで行うもう1つのことは、関数のスコープとeachその2つのパラメーターの1つを利用することです。

$.each($(element_array),function(index,elem){
  // $(this)
  // $(elem) 
});

のスコープを使用し、キーワードeachを利用するための2つの互換性のある方法をリストしました。thisループの各反復にいるとき、現在のアイテムは変数eachで見つけることができます。$(this)を使用することもできます$(elem)

ネストされたコマンドがある場合は、eachネストされたループごとに異なる変数を使用し、を使用しない方がよいと思いますthis。混乱が少ないと思います。

したがって、基本的には、相対的な現在の変数を使用して、その子孫内を検索する必要があります。

var graph_array = [];

$('.graph').each(function(divIndex,currentDiv) {
  if (graph_array[divIndex] == undefined){ graph_array[divIndex] = []; }
  $(currentDiv).find('ul').each(function(ulIndex,currentUl) {
    if (graph_array[divIndex][ulIndex] == undefined){ graph_array[divIndex][ulIndex] = []; }
    $(currentUl).find('li').each(function(liIndex,currentLi) {
      if (graph_array[divIndex][ulIndex][liIndex] == undefined){ graph_array[divIndex][ulIndex][liIndex] = []; }     
      graph_array[divIndex][ulIndex][liIndex]['g-val'] = $(currentLi).attr('g-val');
      graph_array[divIndex][ulIndex][liIndex]['g-color'] = $(currentLi).attr('g-color');
    });
  });
});

console.log(graph_array);​

ライブデモ

于 2012-10-20T20:32:46.840 に答える
0

このようなことをしてください:-

var graphArray = new Array();
$(".graph ul li").each(function(i) {
    graphArray[i] = $(this).attr("g-color") + ":" + $(this).attr("g-val");
});

alert(graphArray);
于 2012-10-20T20:35:15.590 に答える