AJAX构建的列表上的jQuery.empty()不起作用



我有一个无序列表(每个列表元素都包含一些进一步的标记,但这并不重要),它是从AJAX对DB的调用中构建(实例化和附加)的。我想在生成任何后续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>

如果这有帮助的话。

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

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

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

第一次做得很好。我不知道Mustache在做什么来混淆jQuery,我会在有更多时间的时候尝试一下。

最新更新