我在TreeView控件中填充了数据。我将如何从父节点中拖动某个特定的子节点并将其拖放到DIV或任何部分,使用JQUERY?我知道在jQuery中,有“可拖动”和“可拖拽”的方法,使这成为可能。但我想拖动一个特定的子节点并放下它。拖放子节点
或atleast如何使用jQuery获取特定子节点的文本/ ID?我希望我可以拖动,如果如果你有以下ASPX我可以获取子节点
我在TreeView控件中填充了数据。我将如何从父节点中拖动某个特定的子节点并将其拖放到DIV或任何部分,使用JQUERY?我知道在jQuery中,有“可拖动”和“可拖拽”的方法,使这成为可能。但我想拖动一个特定的子节点并放下它。拖放子节点
或atleast如何使用jQuery获取特定子节点的文本/ ID?我希望我可以拖动,如果如果你有以下ASPX我可以获取子节点
好,我将其添加为另一种答案,因为评论框是小,
要隐藏/显示项目的同时拖动可以使用的启动和停止的事件。
本示例在拖动时显示/隐藏treenode文本旁边的+/-(折叠/非折叠)图标,但您可以轻松修改它以隐藏/显示复选框(如果存在)。
<script type="text/javascript">
$(function() {
$(".treeNode").draggable({
start: function (event, ui) {
var previousTd = $(this).parent().prev() ;
$("img", previousTd).css("visibility", "hidden");
},
stop: function (event, ui) {
var previousTd = $(this).parent().prev();
$("img", previousTd).css("visibility", "visible");
});
$("#<%= TreeView1.ClientID%>").droppable({
drop: function (event, ui) {
alert(ui.draggable.text());
}
});
});
我会尝试看看克隆问题。
- 编辑 -
显然克隆问题仅在IE并且通过
<NodeStyle CssClass="treeNode" />
在结合
$(".treeNode").draggable(...
造成这使treeNode类不仅在“a”标签上,而且在周围的“td”标签上。因此,通过使用.treeNode选择器,可拖动方法会执行两次...... FF中不是这种情况。
只需更改“#<%= TreeView1.ClientID%> a.treeNode” 就可以解决此问题因此,使用前面提到的aspx,您将获得以下脚本。
$(function() {
$("#<%= TreeView1.ClientID%> a.treeNode").draggable({
appendTo: 'body',
helper: 'clone',
start: function (event, ui) {
var previousTd = $(this).parent().prev();
$("img", previousTd).css("visibility", "hidden");
},
stop: function (event, ui) {
var previousTd = $(this).parent().prev();
$("img", previousTd).css("visibility", "visible");
},
zIndex: '100'
});
$("#<%= TreeView1.ClientID%>").droppable({
drop: function (event, ui) {
alert(ui.draggable.text());
}
});
});
</script>
- 编辑 -
在回答您的评论:
为了得到拖节点的值,你可以使用JavaScript字符串操作筛选出来的href属性(treenode呈现href attr中的值)。
您在放置函数中的JavaScript可能如下所示。 (仍然需要做一些检查为空值ofcourse)
var hrefParts = $(ui.draggable.context.href.split("\\"));
var nodeValue = hrefParts[hrefParts.length - 1];
nodeValue = nodeValue.substring(0, nodeValue.length - 2);
alert(nodeValue);
或者你也可以通过继承树节点使其干净了一点客户方和一个div中,你把你的客户方定制attribut包裹每树节点ID。
您的自定义树节点可能看起来像这样
public class WrappedTreeNode : TreeNode
{
public string ClientValue { get; set; }
protected override void RenderPreText(HtmlTextWriter writer)
{
writer.WriteBeginTag("div");
//you can simply use the base.Value aswell here if you want them to be the same
writer.WriteAttribute("id", ClientValue);
base.RenderPreText(writer);
}
protected override void RenderPostText(HtmlTextWriter writer)
{
base.RenderPostText(writer);
writer.WriteEndTag("div");
}
}
然后在你的aspx应用(先注册你自定义Web控制组件)
<ServerControls:WrappedTreeNode Text="Bradley" ClientValue="ID-1221"/>
,而不是
<asp:TreeNode Text="Bradley" Value="ID-1221"/>
和你javascript保持干净整洁
alert($(ui.draggable).parent().attr("id"));
<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode Text="Employees">
<asp:TreeNode Text="HR" Value="SubClass1">
<asp:TreeNode Text="Bradley" Value="ID-1234" />
<asp:TreeNode Text="Whitney" Value="ID-5678" />
<asp:TreeNode Text="Barbara" Value="ID-9101" />
</asp:TreeNode>
<asp:TreeNode Text="IT" Value="SubClass2">
<asp:TreeNode Text="Jimmy" Value="ID-5587" />
<asp:TreeNode Text="Samantha" Value="ID-5474" />
<asp:TreeNode Text="Freddy" Value="ID-2001" />
</asp:TreeNode>
</asp:TreeNode>
</Nodes>
<NodeStyle CssClass="treeNode" />
</asp:TreeView>
添加
<script type="text/javascript">
$(function() {
$(".treeNode").draggable();
$("#<%= TreeView1.ClientID%>").droppable({
drop: function (event, ui) {
alert(event.originalTarget.text);
}
});
});
</script>
要显示下降节点的文本。
虽然您将需要jquery.ui库。
如果你打算拖拽一个treenode及其子节点,你可能会有一些乐趣,因为显然树节点被呈现为一个表格(对于父级)和一个带有子级别的div。没有div包装两者。
也许你可以重写TreeView派生类中的RenderContents,并自己递归地处理treenodes的渲染,但听起来像是包装两个元素的很多工作。
也许更好的选择是使用JQuery插件来渲染你的treelist。
嗨Stefaan ...我试过了。我可以拖动一些问题。我在“draggable”中通过了“{helper:clone}”作为参数。问题如下: 1.拖动节点后,文本会在拖动时显示两次。同时作为警报消息。该警报将显示两次,因为文本在拖动时显示两次 2.拖放拖动的节点后,会出现运行时脚本错误,指出“originalTargetText.text为空或不是对象”。同名警报消息,错误消息还显示两次与拖动节点文本显示两次相关。 我认为这是我想要的。除了上述问题。 – 2010-07-08 05:14:14
这里我已经在“draggable()”方法中传递了“helper:'clone'”参数,其中节点显示了两次,也是警报消息。如果我不在“draggable()”方法中传递“helper:clone”,节点只显示一次,但每次拖动节点时,节点文本都会与鼠标指针分离。我不想移动节点。当我拖动时,我希望它在TreeView本身中存在,并且节点文本应该在拖动时与鼠标指针一起显示。另外如何消除复选框,而拖动?我只想要拖动子节点,因为我的工作只需要这个。 – 2010-07-08 05:23:52
显然,null引用错误仅在IE中,所以使用ui.draggable.text()而不是event.originalTarget.text。如果我今天找到时间,我会看看其他问题。 – Stefaan 2010-07-09 08:40:31
我将如何检索拖动节点的值? – 2010-07-12 11:12:01
谢谢Steffan .....最后我得到了我想要的......文字和价值。 – 2010-07-13 09:29:42
还有一件事Steffan!我只想拖动子节点。我不必拖动父节点。那么,我将如何让只有子节点可拖动?我应该在可以拖动的上面的jQuery中做什么? – 2010-07-13 09:37:15