【问题标题】:how to jquery parse array in elements?jquery如何解析元素中的数组?
【发布时间】:2015-01-19 12:40:14
【问题描述】:

我在解析数据 json、ajax 时遇到问题。

例子:

<div class="row" id="order-list">
    1. Latte <input type="hidden" name="type[]" value="1"/>
    <div class="extra">
        +ice <input type="hidden" name="extra[]" value="2"/>
        +bigger <input type="hidden" name="exra[]" value=3"/>
    </div>
</div>

<div class="row" id="order-list">2.pizza<input type="hidden" name="type[]" value="2"/>
   <div class="extra"></div>
</div>

<div class="row" id="order-list">
   3.Cocoa <input type="hidden" name="type[]" value="3"/>
   <div class="extra">
        +ice <input type="hidden" name="extra[]" value="2"/>
   </div>
</div>

如何解析数据

type:["1","2","3"],
extra:[["2","3"],[],["2"]]

【问题讨论】:

  • 您的确切 JASON 结构是什么?
  • 额外:[["2","3"],[],["2"] 有语法错误
  • 你的意思是额外的:[["2","3"],[],["2"]] ?

标签: javascript jquery arrays ajax json


【解决方案1】:

尝试这样的事情,根据您的问题,很难直接回答。有比这更简单的答案,但我无法弄清楚你到底需要什么。也可以试试 form serialize()。

<html lang="us">
<head>
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script>

        function getData()
        {
            var typeArray = new Array();
            var extArray = new Array();

            $.each($(".row"),function(key,val){
                var extra = new Array();
                typeArray.push($(val).find(".type").val());
                $.each($(val).find((".extraInput")),function(k,v){
                    extra.push( $(v).val() );
                });
                extArray.push(extra);
            })

            var retObj = {};
            retObj.type = typeArray;
            retObj.extra = extArray;
            return retObj;
        }
        $(document).ready(function(){
            alert( JSON.stringify(getData()) );
        });

    </script>
</head>
<body>

    <div class="row" id="order-list">
        1. Latte <input type="hidden" class="type" name="type[]" value="1"/>
        <div class="extra">
            +ice <input class="extraInput" type="hidden" name="extra[]" value="2"/>
            +bigger <input class="extraInput" type="hidden" name="exra[]" value="3"/>
        </div>
    </div>

    <div class="row" id="order-list">2.pizza<input class="type" type="hidden" name="type[]" value="2"/>
        <div class="extra" ></div>
    </div>

    <div class="row" id="order-list">
        3.Cocoa <input type="extraInput" class="type" name="type[]" value="3"/>
        <div class="extra">
            +ice <input class="extraInput" type="hidden" name="extra[]" value="2"/>
        </div>
    </div>

</body>

【讨论】:

    【解决方案2】:

    我认为您正在寻找 .serializeArray()。 http://api.jquery.com/serializearray/

    【讨论】:

    • 我使用 $('div#order-list :input').serializeArray();它不工作
    • 那么也许你也可以粘贴你的JS。
    • 你必须将你的 dom 包装成一个表单,然后使用 $("#formId").serialize()
    【解决方案3】:

    试试这个好友:

    var types=$('input[name="type[]"]').map(function(E){
        return E.value;
    });
    
    var extra=$('.row').map(function(E){
        return $(E).find('input[name="extra[]"]').map(function(E){return E.value}))
    });
    
    var data={"types":types,"extra":extra}
    

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 2022-11-29
      • 1970-01-01
      • 2018-04-06
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多