2009-12-03 5 views
7

私は、次のようなリストがある場合:jqueryを使用してLIの項目をjsonオブジェクトに変換するにはどうすればよいですか?

私はそのようにのようなJSONオブジェクトに変換するにはどうすればよい
<ul class="nameList"> 
    <li value="1">Bob</li> 
    <li value="2">Frank</li> 
    <li value="3">Sally</li> 
</ul> 

[{ "ID": "1"、 "タイトル": "ボブ"}、 { "ID": "2"、 "タイトル": "フランク"}、 { "ID": "3"、 "タイトル": "フランク"}]

Iそのデータをその形式にして、$ .post()コールをPHPサーバーに渡すことができます。

jQueryを使用して、そのリストからアイテムを取得し、上記のjsonに変換する方法を教えてもらえますか?

答えて

6
var items = []; 

$('ul.nameList').children().each(function() { 
    var $this = $(this); 
    var item = { id: $this.attr('value'), title: $this.html() }; 
    items.push(item); 
}); 
10

jQueryのは、実際には組み込みの配列を構築するために何かありますmap()

var items = $('.nameList').find('li').map(function() { 
    var item = { }; 

    item.id = this.value; 
    item.title = $(this).text(); 

    return item; 
}); 

あなたは後にしているJSON構造に一致するオブジェクトの配列を構築します。すると、JSONにjson2.js含むことによって、新しいブラウザと古いもののために利用可能に組み込まれているJSON.stringifyを使用する、ことをシリアライズ:

// Produces [{'id':1,'title':'bob'},{etc},{etc}] 
var json = JSON.stringify(items); 

また($ .postことに注意してください)自動的にオブジェクトデータのパラメータをシリアル化し、 key1 = value1 & key2 = value2 &などです。サーバー側で厳密にJSONが必要な場合を除き、JSONのシリアル化手順は必要ありません。

+0

あなたのマップ()は最後に.get()が必要です – sircrom

4


あなたは、単にここで、JSONオブジェクトにこれらをプッシュする方法であることができます -

// create a blank array 
    var mylist = []; 

    // loop trough the li 
    $("ul.nameList > li").each(function() {  
    //push element data to the array 
     mylist.push({ 
      "id": $(this).attr("value"), 
      "title": $(this).text() 
     }); 
    }) 

    // then you can simply pass it to the post method 
    $.post("myhandler.php", { list: mylist }, function (data) { 
     // recived data 
    }) 

そしてもちろん、あなたのHTML

<ul class="nameList"> 
    <li value="1">Bob</li> 
    <li value="2">Frank</li> 
    <li value="3">Sally</li> 
</ul> 

実施例の - http://jsfiddle.net/mohammadwali/tkhb5/

これが役に立った!

関連する問題