0

所以,我有这个代码:

function popAreaTree() {

        var tree = $("ol.tree");
        var list1 = tree.children('li');
        var list2 = list1.children('ol').children('li');


        $(tree).on('click', $(this).children('li').children('a'), function(e, i) {
            console.log($(this).text());
            $(this).parent('li').toggleClass('open', 300);
        });

        $.ajax({
            url: '../admin/callbacks/jsonDataList.php',
            data: {t: 'zoneandarea'},
            dataType:"json",
            async: false,
            global: false,
            success: function(j, status) {
                for(var i = 0;1 < j.length; i++) {

                    var li = tree.append('<li class="zone"><a href="#">'+j[i].name+'</a></li>');
                    var areas = '';
                    $.each(j[i].areas, function(i, item) {
                        areas += '<li class="area" data-area-uid="'+item.uid+'">'+item.name+'</li>';
                    });
                    $(areas).insertAfter(li.closest('a')); // This is the problem
                }
            }
        });
    }

它基本上只是创建一个文件树。ajax 发布到一个 php 页面,该页面输出一个 json 数组,每个结果中还有一个数组。它是这样的:

array('name'=>name, 'uid'=>uid, areas=>array('name'=>name, 'uid'=>uid))

我只需要知道如何在li对象中的a标签上执行 insertAfter 。

4

2 回答 2

1

您可以只创建一个 html 字符串并将其附加到您的tree对象:

var html = '<li class="zone"><a href="#">'+j[i].name+'</a>';
$.each(j[i].areas, function(i, item) {
    html += '<li class="area" data-area-uid="'+item.uid+'">'+item.name+'</li>';
});
html += '</li>'; //close first li element

tree.append(html);

顺便说一句,您的问题必须与您的使用有关closest,它会寻找与选择器匹配的最接近的父级。您可能想使用childrenwhich 只是搜索元素的直接子元素。

于 2013-05-06T14:25:27.143 回答
1

您可以在里面寻找锚点,然后使用.after()

li.children('a').after(areas);

虽然,在这种情况下,您也可以只使用.append()

li.append(areas); // this will go behind <a>
于 2013-05-06T14:31:24.317 回答