0

ループから追加するときに、正しい形式でオブジェクトを作成する際に問題が発生しています。

たとえば、いくつかのリストをループします

<ul class="pdmenu">
    <ul class="pdmenu">
    <li class="menu-top" id="vmen-1"><a href="#">1</a></li>
    <li class="menu-item"><a href="#">aaa</a></li>
</ul>

<ul class="pdmenu">
    <li class="menu-top" id="vmen-2"><a href="#">2</a></li>
    <li class="menu-item"><a href="#">aaa</a></li>
    <li class="menu-item"><a href="#">bbb</a></li>
</ul>

<ul class="pdmenu">
    <li class="menu-top" id="vmen-3"><a href="#">3</a></li>
    <li class="menu-item"><a href="#">aaa</a></li>
    <li class="menu-item"><a href="#">bbb</a></li>
</ul>

jQuery を使用して一番上のリスト項目 をループし、と 可視性をオブジェクトに.menu-topプッシュします。id

jsonmenu = $();  // Set empty object.

$('.menu-top').each(function(index) {                   
    jsonmenu.push({ 
        menu: $(this).attr('id'), 
        visible: "" + $(this).next().is(':visible') + ""
    });
});

これにより、各アイテムのメンバーを持つオブジェクトが次のように作成されます

{
    "0": {
        "menu":"vmen-1",
        "visible":"false"
    },
    "length":4,
    "1": {
        "menu":"vmen-2",
        "visible":"false"
    },
    "2":{
        "menu":"vmen-3",
        "visible":"false"
    },
    "3": {
        "menu":"vmen-4",
        "visible":"true"
    }
}

必要なのは、次のような単純な形式だけです。

{
    "menu":"vmen-1",
    "visible":"false" 
},
{
    "menu":"vmen-2",
    "visible":"false"
},
{
    "menu":"vmen-3",
    "visible":"false"
},
{
    "menu":"vmen-4",
    "visible":"true"
}

これを変更して、この単純な形式でオブジェクトを取得するにはどうすればよいですか?

4

2 に答える 2

1

値を保持するには、JSONオブジェクトではなくネイティブ配列を使用します。

var jsonmenu = [];

$('.menu-top').each(function(index) {                   
  jsonmenu.push({menu: $(this).attr('id'), visible: ""+$(this).next().is(':visible')});
});

または、キーと値のペアのようなものを取得したので、次のように実行できます。

var jsonmenu = {};

$('.menu-top').each(function(index) {                   
  jsonmenu[ $(this).attr('id') ] = $(this).next().is(':visible');
});

その結果、次のようになります。

{ 
  'vmen-1': false, 
  'vmen-2': false,
  ...
}
于 2012-12-11T13:03:34.607 に答える
0

空の jQuery オブジェクトではなくネイティブ配列を使用するという答えは既に出ています。ただし、完全を期すために、jQueryには「DOM要素の束を列挙して配列に変換する」などのことを行う別の便利な方法があります.map()

次のように使用します。

var jsonmenu = $('.menu-top').map(function(i,e) {                   
    var $this = $(e);
    return {
        id: $this.attr('id'),
        visible: "" + $this.next().is(':visible') + ""
    }
});

実際の例: http://jsfiddle.net/8szrG/

于 2012-12-11T13:48:43.613 に答える