Я использую элемент управления teleriks treeview (расширения asp.net mvc), где у меня может быть до трех дочерних узлов, вот так (drumroll ...... классная диаграмма ниже):
http://i53.tinypic.com/htu1oy.png
имеет свое собственное форматирование, похожее на это:
<%=
Html.Telerik().TreeView()
.Name("TreeView")
.BindTo(Model, mappings =>
{
mappings.For<Node1>(binding => binding
.ItemDataBound((item, Node1) =>
{
item.Text = Node1.Property1;
item.Value = Node1.ID.ToString();
})
.Children(Node1 => Node1.AssocProperty));
mappings.For<Node2>(binding => binding
.ItemDataBound((item, Node2) =>
{
item.Text = Node2.Property1;
item.Value = Node2.ID.ToString();
})
.Children(Node2 => Node2.AssocProperty));
mappings.For<Node3>(binding => binding
.ItemDataBound((item, Node3) =>
{
item.Text = Node3.Property1;
item.Value = Node3.ID.ToString();
}));
})
%>
, которое заставляет его отображаться так.Я нахожу необычным то, что когда я устанавливаю значение, оно отображается в скрытом вводе?Но в любом случае: ...
<li class="t-item">
<div class="t-mid">
<span class="t-icon t-plus"></span>
<span class="t-in">Node 1</span>
<input class="t-input" name="itemValue" type="hidden" value="6" /></div>
<ul class="t-group" style="display:none">
<li class="t-item t-last">
<div class="t-top t-bot">
<span class="t-icon t-plus"></span>
<span class="t-in">Node 1.1</span>
<input class="t-input" name="itemValue" type="hidden" value="207" />
</div>
<ul class="t-group" style="display:none">
<li class="t-item">
<div class="t-top">
<span class="t-in">Node 1.1.1</span>
<input class="t-input" name="itemValue" type="hidden" value="1452" />
</div>
</li>
<li class="t-item t-last">
<div class="t-bot">
<span class="t-in">Node 1.1.2</span>
<input class="t-input" name="itemValue" type="hidden" value="1453" />
</div>
</li>
</ul>
</li>
</ul>
Я занимаюсь обновлением div после того, как пользователь нажимает на определенный узел.Но когда пользователь нажимает на узел, я хочу отправить идентификатор, а не текстовое свойство узла.Это означает, что я должен вывести его из значения в этих строках типа <input class="t-input" name="itemValue" type="hidden" value="1453" />
, но он может каждый раз по-разному вкладываться, поэтому существующий код, который я всегда ВСЕГДА не работает:
<script type="text/javascript">
function TreeView_onSelect(e) {
//`this` is the DOM element of the treeview
var treeview = $(this).data('tTreeView');
var nodeElement = e.item;
var id = e.item.children[0].children[2].value;
...
</script>
Итакисходя из этого, как лучше каждый раз получать соответствующий идентификатор с помощью javascript / jquery?
edit :
Извините, чтобы прояснить некоторые вещи
1) Да, я обрабатываю клики на li
дерева и хочу найти значение вложенного скрытого поля ввода.Как вы можете видеть, из кода telerik установка item.Value = Node2.ID.ToString();
вызвала его рендеринг в скрытом поле ввода.
Я отвечаю на щелчки в любом месте дерева, поэтому я не могу использовать свой существующий код, который полагалсяв отношении набора (это будет работать для первых узлов (Узел 1), а не для чего-либо, вложенного ниже)
Я хочу, чтобы, когда есть что-то подобное, представляющее узел, который затем нажимается:
<li class="t-item t-last">
<div class="t-bot">
<span class="t-in">Node 1.1.2</span>
<input class="t-input" name="itemValue" type="hidden" value="1453" />
</div>
</li>
Я хочу, чтобы значение ID отсутствовало на входе, в данном случае 1453
.
Надеюсь, теперь это имеет гораздо больший смысл.
, если это возможноХотелось бы расширить это, чтобы также хранить в переменной, как вложенный элемент, по которому щелкают, то есть, если щелкнуть узел 1.1.2, возвращает 2, узел 1.1 возвращает 1, а узел 1 возвращает 0