簡體   English   中英

將 json object 轉換為表單序列化數據

[英]Convert json object to form-serialized data

我有這個 object 包含 HTML:

obj = {
   amount: 0
   apply_business_delivery: "<div class="form-check"><input type="checkbox" checked class="form-check-input" name="apply_business_delivery" id="apply_business_delivery"></div>"
   apply_private_delivery: "<div class="form-check"><input type="checkbox" checked class="form-check-input" name="apply_private_delivery" id="apply_private_delivery"></div>"
   bin: "<i class="far fa-trash-alt"></i>"
   service: "E-mail advisering"
   unit: "<div class="form-group"><select class="form-control form-control-sm select2" name="units" id="units"><option selected>Kr.</option><option >%</option></select></div>"
}

我能否以某種方式將這些值轉換為表單序列化數據,以便更輕松地使用服務器端? 例如,如果選中復選框,則應將其轉換為01

編輯:我想要的是有一個相同的 function 像$('form').serializeArray() 我只是在弄清楚如何在 obj 上執行此操作時遇到問題。

例如$('form').serializeArray()轉換這個 HTML:

<select class="form-control form-control-sm select2" name="company_name"
        id="company_name">
    <option>My company</option>
</select>
<select class="form-control form-control-sm select2" name="type"
        id="type">
    <option>Business</option>
</select>

對此:

 "form" => array:2 [
    0 => array:2 [
      "name" => "company_name"
      "value" => "My company"
    ]
    1 => array:2 [
      "name" => "type"
      "value" => "Business"
    ]
  ]

這是我想要的結果:

obj = {
   amount: 0
   apply_business_delivery: [
      "name" => "apply_business_delivery"
      "value" => 1
   ]
   apply_private_delivery: [
      "name" => "apply_private_delivery"
      "value" => 1
   ]
   bin: ""
   service: "E-mail advisering"
   unit: [
      "name" => "units"
      "value" => "Kr."
   ]
}

這似乎對我有用

var res = $.fn.agGridSerializeRowData( gridFeeOptions.rowData );

/**
 *
 * @param agGridOption
 * @returns {[]}
 */
$.fn.agGridGetAllData = function (agGridOption) {
    let rowData = [];
    agGridOption.api.forEachNode(node => rowData.push(node.data));
    return rowData;
}

/**
 *
 * @param rows
 * @returns {[]}
 */
$.fn.agGridSerializeRowData = function (agGridOption) {
    let allFormsData = [];
    let rows = $.fn.agGridGetAllData(agGridOption);

    $.each(rows, function (i, rowObjects) {
        let obj = {};

        $.each(rowObjects, function (i, e) {
            if (/<\/?[a-z][\s\S]*>/i.test(e)) {
                obj[i] = $.fn.agGridSerializeHtml(e);
            } else {
                obj[i] = e;
            }
        });
        allFormsData.push(obj);
    });
    return allFormsData;
};

/**
 *
 * @param e
 * @returns {{}}
 */
$.fn.agGridSerializeHtml = function( e ) {
    e = e || '';
    let allDataObject = {};
    let allHtmlDataTemp = {};

    if ( e !== '' ) {
        $( e ).find( 'input,select,textarea' ).each( function( i ) {
            allHtmlDataTemp[ i ] = $( this );
        } );
    } else {
        $( 'input,select,textarea' ).each( function( i ) {
            allHtmlDataTemp[ i ] = $( this );
        } );
    }

    $.each( allHtmlDataTemp, function( i ) {
        let $input = $( this );
        let eName;
        let eVal;

        if ( ($input.attr( 'type' ) === 'submit') ||
            ($input.attr( 'type' ) === 'button') ) {
            return true;
        }

        if ( ($input.attr( 'name' ) !== undefined) && ($input.attr( 'name' ) !== '') ) {
            eName = $input.attr( 'name' ).trim();
        } else if ( ($input.attr( 'id' ) !== undefined) && ($input.attr( 'id' ) !== '') ) {
            eName = $input.attr( 'id' ).trim();
        } 

        if ( $input.val() !== undefined ) {
            if ( ($input.attr( 'type' ) === 'radio') || ($input.attr( 'type' ) === 'checkbox') ) {
                eVal = $input.is(":checked");
            } else {
                eVal = $input.val();
            }
        } else if ( $input.text() !== undefined ) {
            eVal = $input.text();
        }

        if ( eVal === undefined || eVal == null ) {
            eVal = '';
        }

        if ( eName !== undefined ) {
            let elementArr = [];
            if ( eName.indexOf( ' ' ) !== -1 ) {
                elementArr = eName.split( /(\s+)/ );
            } else {
                elementArr.push( eName );
            }

            $.each( elementArr, function( index, name ) {
                name = name.trim();
                if ( name !== '' ) {
                    allDataObject[ name ] = eVal;
                }
            } );
        }
    } );
    return allDataObject;
};

前: 在此處輸入圖像描述

后: 在此處輸入圖像描述

暫無
暫無

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

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