У меня есть список, реализованный в виде дерева, и я хочу показать путь, который проходит через этот список.
я сделал то, что было предложено здесь:
как получить путь обхода в древовидной структуре, как загрузка структуры из 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, чтобы она отображала правильный путь, который был пройден?
спасибо