zoukankan      html  css  js  c++  java
  • Javascript关于JSON集合的几种循环方法

    /**
     * 根据json数据生成option树形控件
     * 如果有children节点则自动生成树形数据
     * @param {JSON} data
     * @param {int} n 节点深度
     * @param {string} char 节点名称前缀
     * @returns {string}
     * @since 1.0 2014-8-22 by sutroon
     * @example
     *      var data = (typeof (data) == "object") ? data : $.parseJSON(data);
     *      var str = '';
     *      str=generate_options(data);
     */
    function generate_options(data, n, char) {
        if (n == undefined) {
            n = 0;
        }
        if (char == undefined) {
            char = '..';
        }
        var pad = '';
        while (n > 0) {
            pad += char;
            n--;
        }
        var str = '';
        if (data.length) {
            // 多行格式
            for (var i = 0; i < data.length; i++) {
                if (data[i].id) {
                    // 用于[{"id":"1","name":"name1"}]格式                
                    str += '<option value="' + data[i].id + '">' + pad + (data[i].name ? data[i].name : data[i].text) + '</option>';
                } else if (data[i].item) {
                    // 用于[{"item":"1"},{"item":"2"}]
                    str += '<option value="' + data[i].item + '">' + pad + data[i].item + '</option>';
                } else {
                    // 用于["item1","item2"]格式
                    str += '<option value="' + data[i] + '">' + pad + data[i] + '</option>';
                }
                if (data[i].children) {
                    str += generate_options(data[i].children, n + 1, char);
                }
            }
        }
        else {
            // 用于{"a":"a1","b":"b2"}单行格式
            for (var attr in data) {
                str += '<option value="' + attr + '">' + data[attr] + '</option>';
            }
        }
        return str;
    }

    ======================================================补充Jquery版本=====================
    /**
         * Jquery版
         * @param JSON或Array data
         * @param integer n
         * @param string char
         * @returns string
         * @since 1.0 <2015-6-11> SoChishun Added.
         * @example 
         alert(generate_options([{"id": "1", "name": "name1"}]));
         alert(generate_options([{"item": "1"}, {"item": "2"}]));
         alert(generate_options(["item1", "item2"]));
         alert(generate_options({"a": "a1", "b": "b2"}));
         */
        function generate_options(data, n, char) {
            if (n == undefined) {
                n = 0;
            }
            if (char == undefined) {
                char = '..';
            }
            var pad = '';
            while (n > 0) {
                pad += char;
                n--;
            }
            var str = '';
            if ($.isArray(data)) {
                // 多行格式
                $.each(data, function () {
                    if (this.id) {
                        // 用于[{"id":"1","name":"name1"}]格式                
                        str += '<option value="' + this.id + '">' + pad + (this.name ? this.name : this.text) + '</option>';
                    } else if (this.item) {
                        // 用于[{"item":"1"},{"item":"2"}]
                        str += '<option value="' + this.item + '">' + pad + this.item + '</option>';
                    } else {
                        // 用于["item1","item2"]格式
                        str += '<option value="' + this + '">' + pad + this + '</option>';
                    }
                    if (this.children) {
                        str += generate_options(this.children, n + 1, char);
                    }
                })
            }
            else {
                if ($.isPlainObject(data)) {
                    // 用于{"a":"a1","b":"b2"}单行格式
                    $.each(data, function (key) {
                        str += '<option value="' + key + '">' + this + '</option>';
                    })
                }
            }
            return str;
        }
    
    
    
     

    版权声明:本文原著天澜(14507247#qq.com),版权遵循知识共享许可协议[查看]。您可自由转载收藏,但请留此声明,感谢!

  • 相关阅读:
    DataAnnotations
    使用BizTalk实现RosettaNet B2B So Easy
    biztalk rosettanet 自定义 pip code
    Debatching(Splitting) XML Message in Orchestration using DefaultPipeline
    Modifying namespace in XML document programmatically
    IIS各个版本中你需要知道的那些事儿
    关于IHttpModule的相关知识总结
    开发设计的一些思想总结
    《ASP.NET SignalR系列》第五课 在MVC中使用SignalR
    《ASP.NET SignalR系列》第四课 SignalR自托管(不用IIS)
  • 原文地址:https://www.cnblogs.com/sutroon/p/4563957.html
Copyright © 2011-2022 走看看