关于AJAX构造列表的jQuery .empty()不起作用

时间:2012-09-03 05:36:30

标签: jquery html ajax mustache

我有一个无序列表(每个列表元素包含一些进一步的标记,但这无关紧要)是从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>

如果这有帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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

第一次完美地工作。我不知道Mustache正在做什么来混淆jQuery,当我有更多的时间在我手上时,我会尝试研究这个。