我正在使用teleriks treeview控件(asp.net mvc扩展),我可能最多有三个子节点,就像这样(鼓声......下面很棒的图表):
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。但是当用户点击某个节点时,我想发送ID而不是Node文本属性。这意味着我必须从这些类型行<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获取相应id的更好方法是什么?
修改:
很抱歉澄清一些事情
1)是的,我正在点击树的li
点击&amp;想要找到嵌套隐藏输入字段的值。如您所见,通过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
答案 0 :(得分:3)
有点不清楚你在问什么,但根据你的JavaScript片段,我猜你正在处理点击li
树的点击&amp;想找到嵌套隐藏字段的value
?如果是这样,你想要这样的东西:
function TreeView_onSelect(e) {
var id = $(e.item).find(".t-input:first").val();
}
修改:在回答您的后续问题时,您应该可以使用以下内容获取树深度:
var depth = $(e.item).parents(".t-item").length;
答案 1 :(得分:1)
在jQuery中,您可以使用.val();
返回任何表单元素值$(this).val(); // would return value of the 'this' element.
我不确定你为什么使用相同的隐藏输入字段名称“itemValue”,但是如果你能更清楚地说明你所问的内容我肯定这并不太难。
答案 2 :(得分:0)
$('.t-input').live('change',function(){
var ID_in_question=$(this).val();
});