jsonfying选择框选项

时间:2011-10-20 12:04:42

标签: jquery jqgrid

我有一个服务器端查询,它通常以

形式生成所有选择框选项
<option val='1'> text1 </option>
<option val='2'> text2 </option>
<option val='3'> text3 </option>
<option val='4'> text4 </option>
<option val='5'> text5 </option>

现在我想将所有这些转换为jqgrid理解其下拉列表的格式。即{1:text1,2:text2 ....}条件是我不会触及服务器端代码。我需要在客户端通过添加通用函数来修改它。现在我通过jquery ajax调用

得到这个
 getGridDropDown: function (url) {
        $.ajax({
      type: "GET",
      url: url,
      dataType: "html",
      success: function (html) {
         $(html).find('option').each(function(key){
             alert(key)
         })


      },
      error: function () {
        console.log("Error in ajax call to url:  " + url);
      }
    });
 },

现在我尝试了各种格式,使用regexp的唯一方法是唯一的方法。我不能将html返回变量作为jquery变量处理,我可以说$ this.val()+ this.text()

4 个答案:

答案 0 :(得分:1)

要使用find,返回的html需要一个有效的根元素。

尝试以下方法:

$("<div/>").append(data).find('option')

<强> Example on jsfiddle

答案 1 :(得分:1)

var obj;
$('option').each(function (i,n){
   obj[i] = $(n).text();
});

console.log(obj); //在您的控制台上输出您的信息

我认为应该这样做,但要修复选择器,这样你才能#select_tag_id option

答案 2 :(得分:1)

如果您的服务器可以在<options>内生成<select>列表,则可以editoptionssearchoptions直接使用dataUrl

如果您的服务器只能生成<options> 不带 <select></select>的列表,并且您无法更改服务器端的行为,则可以使用buildSelect来解决问题:

editoptions: {
    dataUrl: 'yourUrl',
    buildSelect: function (data) {
        return "<select>" + data + "</select>";
    }
}

(如果使用旧版本的jqGrid,可能需要测试typeof(data)并使用datadata.responseText

也可能需要使用ajaxSelectOptions: { cache: false }(请参阅here

答案 3 :(得分:0)

很安静。一个简单的技巧

getGridDropDown: function (url) {
        $.ajax({
          type: "GET",
          async:false,
          url: url,
          dataType: "json",
          success: function (html) {
             data = new String();
             $(html).each(function(key){

/ * jqgrid选择选项格式* /

     data += this.value +":"+this.label+";";
             })
           gridParams['data'] = data     
          },
          error: function () {
            console.log("Error in ajax call to url:  " + url);
          }
        });
     },

感谢您的回答