jQuery--填充从json中选择

Doc*_*day 52 jquery

我在我的java sevlet中有一个地图,并将其转换为正常工作的json格式.

当我在下面执行此功能时会创建一个下拉菜单,但它会将每个字符作为选项?这就是我得到的:

$(document).ready(function(){
    var temp= '${temp}';
    //alert(options);
    var $select = $('#down');                        
    $select.find('option').remove();                          
    $.each(temp, function(key, value) {              
        $('<option>').val(key).text(value).appendTo($select);     
    });
});
Run Code Online (Sandbox Code Playgroud)

以JSON格式映射内容

{"1" : "string","2" : "string"}
Run Code Online (Sandbox Code Playgroud)

web*_*.pl 74

我会做这样的事情:

$.each(temp,function(key, value) 
{
    $select.append('<option value=' + key + '>' + value + '</option>');
});
Run Code Online (Sandbox Code Playgroud)

JSON结构将不胜感激.首先你可以试验find('element')- 它取决于JSON.

  • 它应该是$ .each(temp,function(key,value) (4认同)
  • 此解决方案性能较差,它在每次迭代中修改DOM,更好地在字符串中构建选项,然后将其附加到循环外的选择. (3认同)

cjr*_*don 42

只更改一次DOM ...

var listitems = '';
$.each(temp, function(key, value){
    listitems += '<option value=' + key + '>' + value + '</option>';
});
$select.append(listitems);
Run Code Online (Sandbox Code Playgroud)

  • 你必须做```var listitems ='';```或者你得到一个未定义的concat (8认同)

Nul*_*ion 5

小提琴

var $select = $('#down'); 
$select.find('option').remove();  
$.each(temp,function(key, value) 
{
    $select.append('<option value=' + key + '>' + value + '</option>');
});
Run Code Online (Sandbox Code Playgroud)


flo*_*rex 5

一种解决方案是创建您自己的 jquery 插件,该插件采用 json 映射并使用它填充选择。

(function($) {     
     $.fn.fillValues = function(options) {
         var settings = $.extend({
             datas : null, 
             complete : null,
         }, options);

         this.each( function(){
            var datas = settings.datas;
            if(datas !=null) {
                $(this).empty();
                for(var key in datas){
                    $(this).append('<option value="'+key+'"+>'+datas[key]+'</option>');
                }
            }
            if($.isFunction(settings.complete)){
                settings.complete.call(this);
            }
        });

    }

}(jQuery));
Run Code Online (Sandbox Code Playgroud)

你可以通过这样做来调用它:

$("#select").fillValues({datas:your_map,});
Run Code Online (Sandbox Code Playgroud)

优点是在任何地方你都会遇到同样的问题,你只是打电话

 $("....").fillValues({datas:your_map,});
Run Code Online (Sandbox Code Playgroud)

等等!

您可以根据需要在插件中添加功能