簡體   English   中英

從輸入創建JSON

[英]create JSON from inputs

如何基於每行兩個輸入字段(共48行)創建javascript JSON(?)對象?

我有這個:

<div><input name = "name" /></div> <div><input name = "rating" /></div>
<div><input name = "name" /></div> <div><input name = "rating" /></div>
<div><input name = "name" /></div> <div><input name = "rating" /></div>
...
...

然后,我想按等級(desc)對對象進行排序。 能做到嗎?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
  $(function() {
    var players = [{ name: "Paul", rank: 1}, {name: "Michael", rank: 2}];

    $.each(players, function(key, value){ 
      $("#containerofPlayers").append('<div id="' + value.name + '">' + value.name + ' is ranked ' + value.rank + '</div>');
    });
  });
</script>

發生的事情是您有一個對象數組 您遍歷數組中的每個對象以獲取其數據。 然后,您將帶有值的新div附加到<div id="containerofPlayers"></div>元素上。

希望這可以幫助。

編輯:如果您不想在jQuery中創建<div>元素,而只是分配文本,則可以改為:

$('#'+value.name).text(value.name + " is ranked " + value.rank);

編輯答案:

既然您更改了原始問題,

<div><input name="name" /></div> <div><input name = "rating" /></div>

做更多像↓

<div id="players">
    <div class="player">
        <label>Name: </label><input class="playerName" type="text"/>
        <label>Rank: </label><input class="playerRank" type="number"/>
    </div>
    <div class="player">
        <label>Name: </label><input class="playerName" type="text"/>
        <label>Rank: </label><input class="playerRank" type="number"/>
    </div>
</div>

然后在jQuery中

$(function() {
  var players = []; //create an Array
  $("#players .player").each(function(i, obj){
    var playerName = $(this).children('.playerName').val();
    var playerRank = $(this).children('.playerRank').val();
    $(this).push({"name": playerName, "rank": playerRank}); // this will give you an array of objects like in my previous answer, then you can use that data to display it.
  });

  players.sort(function(a, b) { 
    return (a.rank - b.rank) || a.name.localeCompare(b.name); 
  });

  $.each(players, function(index, value){
      $("#result").append('<div id="' + value.name + '">' + value.name + ' is ranked ' + value.rank + '</div>');
  })
});

這會有所幫助嗎?

 var pl=[['Jack',1],['Jill',2],['Lucy',3],['Marc',4],['John',5],['Eva',6],['Anne',7],['Ben',8]]; divs=$('div[id^=NAME]'); pl.forEach(function(v,i){divs[i].innerHTML=v[0]+' (rank: '+v[1]+')';}) 
 div {display: inline-block; width:120px;} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="NAME-1"></div> vs. <div id="NAME-2"></div><br/> <div id="NAME-3"></div> vs. <div id="NAME-4"></div><br/> <div id="NAME-5"></div> vs. <div id="NAME-6"></div><br/> <div id="NAME-7"></div> vs. <div id="NAME-8"></div><br/> <div id="NAME-9"></div> vs. <div id="NAME-10"></div><br/> <div id="NAME-11"></div> vs. <div id="NAME-12"></div><br/> <div id="NAME-13"></div> vs. <div id="NAME-14"></div><br/> <div id="NAME-15"></div> vs. <div id="NAME-16"></div><br/> <div id="NAME-17"></div> vs. <div id="NAME-18"></div><br/> <div id="NAME-19"></div> vs. <div id="NAME-20"></div><br/> <div id="NAME-21"></div> vs. <div id="NAME-22"></div><br/> <div id="NAME-23"></div> vs. <div id="NAME-24"></div><br/> <div id="NAME-25"></div> vs. <div id="NAME-26"></div> 

pl是數組的排序數組,而divs是包含要放入值的目標div的jquery對象。也許可以在封閉的容器中找到它們? 在這種情況下,您可以使用其他選擇器來查找它們。

編輯:(已編輯問題的答案)

要從輸入字段中收集數據,可以執行以下操作:

 $(function(){ var i,str=''; for (var i=1;i<11;i++) str+='<input type="text" name="n'+i+'" placeholder="Name '+i+'"/> ' +'<input type="text" name="r'+i+'" placeholder="Rating '+i+'"/><br/>'; $('#frm1').prepend(str); $('#go').click(go); }) function go(){ var name, jsn=$.makeArray($('input','#frm1').map(function(i,o){ var v=$(o).val(); if (i%2 && v>0) return [[name,v]]; else name=v;})); jsn.sort(function(a,b){ return a[1]-b[1];}); $('#result').text(JSON.stringify(jsn)); return false; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form id="frm1"><button id="go">go</button></form> <pre id="result"></pre> 

您可以嘗試我的方式:

  1. 將所有行設置為1形式,每個輸入具有唯一的名稱。
  2. 通過jQuery獲取表單數據。
  3. 使用我的formObj2Json()函數將表單數據轉換為json,並且每一項的鍵都是唯一的名稱。

 $(function(){ $(document).on('click', '#grap', function(){ var formData = $('#anph').serializeArray(), rs = formObj2Json(formData); $('#rs').html(JSON.stringify(rs, undefined, 2)); }); }) function formObj2Json(formArray) { //serialize data function var returnArray = {}; for (var i = 0, len = formArray.length; i < len; i++) returnArray[formArray[i].name] = formArray[i].value; return returnArray; } 
 <!DOCTYPE html> <html> <head> <meta name="description" content="Knockout 1"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> </head> <body> <button id="grap">grap</button> <form id="anph"> <div class="group"><input name="name1" /><input name="rating1" /></div> <div class="group"><input name="name2" /><input name="rating2" /></div> <div class="group"><input name="name3" /><input name="rating3" /></div> <div class="group"><input name="name4" /><input name="rating4" /></div> <div class="group"><input name="name5" /><input name="rating5" /></div> <div class="group"><input name="name6" /><input name="rating6" /></div> <div class="group"><input name="name7" /><input name="rating7" /></div> <div class="group"><input name="name8" /><input name="rating8" /></div> <div class="group"><input name="name9" /><input name="rating9" /></div> <div class="group"><input name="name10" /><input name="rating10" /></div> </form> <pre id="rs"></pre> <script src="https://code.jquery.com/jquery-1.7.2.js"></script> </body> </html> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM