我有一个服务器端查询,它通常以
形式生成所有选择框选项<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()
答案 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>
列表,则可以editoptions或searchoptions直接使用dataUrl
。
如果您的服务器只能生成<options>
不带 <select>
和</select>
的列表,并且您无法更改服务器端的行为,则可以使用buildSelect
来解决问题:
editoptions: {
dataUrl: 'yourUrl',
buildSelect: function (data) {
return "<select>" + data + "</select>";
}
}
(如果使用旧版本的jqGrid,可能需要测试typeof(data)
并使用data
或data.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);
}
});
},
感谢您的回答