как пройти путь в древовидной структуре? - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть список, реализованный в виде дерева, и я хочу показать путь, который проходит через этот список.

я сделал то, что было предложено здесь:

как получить путь обхода в древовидной структуре, как загрузка структуры из XML в Javascript

, которые включают использование такой функции:

 function getBreadcrumbs(a) {
    debugger;
    var path = " / " + $(a).text(),
        $parent = $(a).parents("li").eq(1).find("a:first");

    if ($parent.length == 1) {
        path = getBreadcrumbs($parent) +path;
    }
    return path;
}


 $("ul a").click(function () {
    $("#breadcrumbs").text(getBreadcrumbs(this));

});

, который работает каким-то образом, но не полностью. он показывает первый уровень списка, но не идет дальше. проверив это, я понял, что это возможно, потому что внутренний список не генерируется, если на него не щелкнули. код для создания списка выглядит так:

 <div id="tree_1" class="tree-demo scrollbar .scrollbar-heavy-rain" style="height:300px; overflow-y: scroll;overflow-x: scroll;">
                                <ul>
                                    @foreach (var item in Model.Where(m => m.level == 2 && !m.code.StartsWith("018") && !m.code.StartsWith("022")))
                                    {
                                        @MvcHtmlString.Create(OrderedList(item, Model.Where(m => m.level != 1)))
                                    }
                                    @MvcHtmlString.Create(show(Model.FirstOrDefault(m => m.code.StartsWith("018") && m.level == 2), Model.Where(m => m.code.StartsWith("018"))))
                                    @MvcHtmlString.Create(showForm(Model.FirstOrDefault(m => m.code.StartsWith("022") && m.level == 2), Model.Where(m => m.code.StartsWith("022"))))
                                </ul>
                            </div>

и его вызываемые функции:

@functions{
public string path_Generator(string name , string _path )
{
    _path = _path + name + "/";
    return _path;
}
public String OrderedList(CodingVm user, IEnumerable<CodingVm> list)
{

    if (list.Any(m => m.level == user.level + 1 && m.code.StartsWith(user.code)))
    {

        var res = "<li id='" + user.code + "'>";
        res += "<a data-id= \"" + user.code + "\" onclick=\"ShowGrid('" + user.code + "' getBreadcrumbs(a))\" id =\"btnAddBookTitle\">";
        res += user.name;
        res += "";
        res += "</a>";
        res += "<ul>";
        foreach (var itemSub1 in list.Where(m => m.level == user.level + 1 && m.code.StartsWith(user.code)))
        {
            res += OrderedList(itemSub1, list);
        }
        res += "</ul>";
        res += "</li>";
        return res;
    }

    else
    {

        var res2 = "";
        res2 += "<li id='" + user.code + "'>";
        res2 += "<a  onclick=\"ShowGrid('" + user.code + "') getBreadcrumbs(a) \" id =\"btnAddBookTitle\">";
        res2 += user.name;
        res2 += "</a>";

        res2 += "</li>";
        return res2;
    }

}
public String show(CodingVm user, IEnumerable<CodingVm> list)
{
    var res = "<li id='" + user.code + "'>";
    res += "<a data-id= \"" + user.code + "\" onclick=\"ShowGrid('" + user.code + "')\" id =\"btnAddBookTitle\">";
    res += user.name;
    res += "";
    res += "</a>";
    res += "<ul>";
    foreach (var itemSub1 in list.Where(m => m.level == user.level + 1 && m.code.StartsWith(user.code)))
    {
        res += "<li id='" + itemSub1.code + "'>";
        res += "<a data-id= \"" + itemSub1.code + "\" onclick=\"ShowGrid('" + itemSub1.code + "')\" id =\"btnAddBookTitle\">";
        res += itemSub1.name;
        res += "";
        res += "</a>";
        res += "<ul>";
        foreach (var itemSub2 in list.Where(m => m.level == itemSub1.level + 1 && m.code.StartsWith(itemSub1.code)))
        {
            res += "<li id='" + itemSub2.code + "'>";
            res += "<a data-id= \"" + itemSub2.code + "\" onclick=\"ShowGrid('" + itemSub2.code + "')\" id =\"btnAddBookTitle\">";
            res += itemSub2.name;
            res += "";
            res += "</a>";
            res += "<ul>";
            foreach (var itemSub3 in itemSub2.ProfileList)
            {
                res += "<li id='" + itemSub3.Id + "'>";
                res += "<a  onclick=\"MinaDent.Coding.ShowDivProfile('" + itemSub3.Id + "','" + true + "')\" id =\"btnAddBookTitle\">";
                res += itemSub3.FaName;
                res += "</a>";
            }
            res += "</ul>";
            res += "</li>";

        }
        res += "</ul>";
        res += "</li>";
    }
    res += "</ul>";
    res += "</li>";
    return res;
}

public String showForm(CodingVm user, IEnumerable<CodingVm> list)
{
    var res = "<li id='" + user.code + "'>";
    res += "<a data-id= \"" + user.code + "\" onclick=\"ShowGrid('" + user.code + "')\" id =\"btnAddBookTitle\">";
    res += user.name;
    res += "";
    res += "</a>";
    res += "<ul>";
    foreach (var itemSub1 in list.Where(m => m.level == user.level + 1 && m.code.StartsWith(user.code)))
    {
        res += "<li id='" + itemSub1.code + "'>";
        res += "<a data-id= \"" + itemSub1.code + "\" onclick=\"ShowGrid('" + itemSub1.code + "')\" id =\"btnAddBookTitle\">";
        res += itemSub1.name;
        res += "";
        res += "</a>";
        res += "<ul>";
        foreach (var itemSub2 in itemSub1.ProfileList)
        {

            res += "<li id='" + itemSub2.Id + "'>";
            res += "<a  onclick=\"MinaDent.Coding.ShowDivProfile('" + itemSub2.Id + "','" + true + "')\" id =\"btnAddBookTitle\">";
            res += itemSub2.FaName;
            res += "</a>";
            res += "</li>";

        }
        res += "</ul>";
        res += "</li>";
    }
    res += "</ul>";
    res += "</li>";
    return res;
}

Теперь мой вопрос: как изменить эту функцию сценария Java, чтобы она отображала правильный путь, который был пройден?

спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...