1

我有一个无序列表(每个列表元素都包含一些进一步的标记,但这不重要),它是从对数据库的 AJAX 调用构造(实例化和附加)的。我想在生成任何以下 AJAX 调用结果之前清除列表。

$('#list').empty()

由于某种原因不起作用(我尝试了许多带有 .remove() 和 .not() 的替代模式,但没有成功)。我知道我正确地定位了这些项目,因为我可以更改 css 等。我能做的最好的就是从每个 li 中按类删除一个元素,方法是:

$('list li .class').remove()

我在这里做一些根本错误的事情吗?

顺便说一句,列表元素正在使用 Mustache 呈现,但这并不重要,因为一旦呈现它只是 HTML 标记,还是我在这里也错了?

谢谢你的帮助。


[编辑] 好的,所以没有运气在 jsfiddle 上获得任何体面的 AJAX 响应,所以这里是 AJAX 函数调用的本质:

function loadResults() {
$.ajax({
    'type' : 'POST',
    'url' : '/lib/ajax.php',
    'data' :    {
            'data1' : $('#data1').text(),
            'data2' : $('#data2').text(),
            'data3' : $('#data3').text()
            },
    'success' : function(data) {

           data = JSON.parse(data);

           // remove old results and add new results iteratively
           $('#results ul').empty();

           $.each(data, function(i, elem) {

              // Load the template
              $.get('/views/default/templates/elem_tpl.html', function(t) {
                       tmpl = t;
                   });

               $(document).ajaxStop(function() {
                   var template = Mustache.render(tmpl, elem);
                   $('#results ul').append(template);
               });
            });
        }
});

}

HTML 实际上只是用于测试目的的基本列表:

<div id="results">
     <ul>
     </ul>
</div>

如果这有帮助的话。

4

1 回答 1

0

不完全是答案,但是对于在使用 Mustache 进行某些动态模板时遇到类似问题的任何人,我的解决方案是切换到 underscore.js 用于客户端模板。

如果您只是在调用模板之前添加以下内容,则无需修改任何模板(我的模板在外部文件中,因此可以节省时间):

_.templateSettings = {
interpolate : /\{\{(.+?)\}\}/g
};

第一次完美运行。我不知道 Mustache 做了什么来混淆 jQuery,当我有更多时间时,我会试着研究一下。

于 2012-09-05T23:17:14.540 回答