【问题标题】:jquery doesn't add my list elements to a dynamic injected <ul> listjquery 不会将我的列表元素添加到动态注入的 <ul> 列表中
【发布时间】:2011-05-02 12:40:37
【问题描述】:

我真的不知道错在哪里。这是我的代码:

$(document).ready(function(){
$("#folderTree > li").live('click',function(){
    var id = $(this).attr("id");
    if($('#' + id).hasClass('folderClosed')){
        $.ajax({
            url: "libs/php/ajax/documents/treeHandler.php",
            type: "POST",
            cache: false,
            dataType: "json",
            data: "treeNode=" + id,
            success: function(data){
                $('#' + id).removeClass('folderClosed');
                $('#' + id).addClass('folderOpen');
                $('#' + id).after('<ul id="#' + id + '-list">');
                $.each(data, function(){
                    var folder = '<li id=' + this.ID + ' class="folderClosed">' + this.folderName + '</li>';
                    $("#" + id + "-list").append(folder);
                })
                $('#' + id).after('</ul>');
            }
        })
    }else{
        $('#' + id).next("ul").remove();
        $('#' + id).removeClass('folderOpen');
        $('#' + id).addClass('folderClosed');
    }
})
})  

我正在构建一个基于 mysql 数据结构的文件夹树,它通过 ajax 作为 json 代码加载。到目前为止一切正常!

我唯一的问题是我的脚本无法将 var 文件夹添加到新注入的元素中。

Firebug 示例代码:

<ul id="folderTree">
    <li class="folderOpen" id="1">100_Projektmanagement</li>
    <ul id="#1-list"></ul>
    <li class="folderClosed" id="3">200_Projektinitialisierung</li>
    <li class="folderClosed" id="4">300_Voranalyse_Studien</li>
    <li class="folderClosed" id="5">400_Konzepte</li>
</ul>

感谢您的帮助。

【问题讨论】:

    标签: jquery json list live


    【解决方案1】:

    您在这里添加了一个带有错误 ID 的元素(不要将哈希添加到属性中,仅在制作选择器时):

    $('#' + id).after('<ul id="#' + id + '-list">');
    //should be:
    $('#' + id).after('<ul id="' + id + '-list">');
    

    总体而言,这样做会更有效率:

    success: function(data){
      var parent = $('#' + id).removeClass('folderClosed').addClass('folderOpen');
      var list = $('<ul />', { id: id + '-list' });
      $.each(data, function(){
        $('<li />', { id: this.id, "class": "folderClosed", text: this.folderName })
          .appendTo(list);
      })
      list.insertAfter(parent);
    }
    

    【讨论】:

    • 你说的太对了,伙计!有时,“我没有看到所有树木的福雷斯特事业”是完美的匹配!
    • @da.eXecutoR - 看看更新的版本......即使你不走这条路,删除$('#' + id).after('&lt;/ul&gt;');......你没有在你去的时候插入HTML ,您正在创建完整的 DOM 元素,因此请确保以这种方式将它们插入块中,没有开始然后结束标记:)
    猜你喜欢
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2016-02-17
    • 2019-10-23
    相关资源
    最近更新 更多