如何使用Mustache.js在下拉列表中设置选定的值?

nol*_*bel 22 javascript jquery templates mustache

是否可以使用Mustache.js执行此操作?

var data = {"val":"3"},
    template = '<select>' +
                    '<option value="1">1</option>' +
                    '<option value="2">2</option>' +
                    '<option value="3">3</option>' +
                '</select>';

var html = Mustache.to_html(template, data);

$(html).appendTo('body');
Run Code Online (Sandbox Code Playgroud)

Mat*_*all 34

val属性不起作用,因为a <select><option>具有该selected属性的s 获取其值.我对胡子不是很熟悉,但这应该有效:

// snip...        
var html = Mustache.to_html(template, data);
$(html)
    .find('option[value=3]').attr('selected', true)
    .end().appendTo('body');
Run Code Online (Sandbox Code Playgroud)

我认为你使用的模板不是惯用的胡子 - 它太粗糙了; 你实际上并没有模仿任何东西.像这样的东西可能是更多的胡子-y:

var template = '<select>{{#options}}' +
                   '<option value="{{val}}" {{#sel}}selected{{/sel}}>' + 
                       '{{txt}}' + 
                   '</option>' + 
               '{{/options}}</select>',

    data = {options: [
        {val: 1, txt: 'uno'},
        {val: 2, txt: 'dos'},
        {val: 3, txt: 'tres', sel: true}
    ]};

var html = Mustache.to_html(template, data);

$(html).appendTo('body');
Run Code Online (Sandbox Code Playgroud)

演示→


小智 12

如果您之后不想修改数组或DOM树,可以使用以下函数:

var selval=3; // select 3
var template = '<select>{{#options}}' +
                   '<option value="{{val}}" {{selected}}>{{txt}}</option>' + 
               '{{/options}}</select>';
var data={
    options: [
        {val: 1, txt: 'one'},
        {val: 2, txt: 'two'},
        {val: 3, txt: 'three'}
    ],
    selected: function() {
         if (this.val==selval) return "selected";
         return "";
    }
};


var html = Mustache.to_html(template, data);
Run Code Online (Sandbox Code Playgroud)