首页技术parentnode属性 vue $parent

parentnode属性 vue $parent

编程之家2026-06-30937次浏览

大家好,今天来为大家分享parentnode属性的一些知识点,和vue $parent的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

parentnode属性 vue $parent

parentNode(parentNode属性什么意思)

您好,我就为大家解答关于parentNode,parentNode属性什么意思相信很多小伙伴还不知道,现在让我们一起来看看吧!1、parentNode属性以 N...

您好,我就为大家解答关于parentNode,parentNode属性什么意思相信很多小伙伴还不知道,现在让我们一起来看看吧!

1、parentNode属性以 Node对象的形式返回指定节点的父节点。

2、parentNode跟parentElement除了前者是w3c标准,后者只ie支持。

3、当父节点的nodeType不是1,即不是element节点的话,它的parentElement就会是null。

4、一般情况parentNode可以取代parentElement的所有功能。

parentnode属性 vue $parent

5、parentElement匹配的是parent为element的情况,而parentNode匹配的则是parent为node的情况。

6、element是包含在node里的,它的nodeType是1。

treeview的问题

tvTreeView.Nodes.Add [父级键值可选], [加入方式可选], KEY值, TEXT值,图片显示[图片的INDEX],被选中时的图片显示[图片的INDEX]

在实际开发中,许多人不喜欢使用TreeView,主要是由于默认的TreeView是“只读”的,不支持添加、删除、编辑、调整节点位置等操作。本文通过一个TVEdit工程说明如何解决这些问题。

TreeView是最灵活的Windows控件之一,它以分层的形式显示数据,允许用户随意扩展或折叠节点。鉴于实际生活中许多事物有着层次关系,如计算机里的文件夹、人事组织关系、地区从属关系等,TreeView的应用也极其广泛。但在实际开发中,许多人不喜欢使用TreeView,主要是由于默认的TreeView是“只读”的,不支持添加、删除、编辑、调整节点位置等操作。本文将通过一个TVEdit工程说明如何解决这些问题。

TVEdit工程(图一)允许在运行时生成节点数据、编辑节点标签、通过拖放操作改变节点的位置,以及将TreeView的数据保存到XML文件或从XML文件读取。

parentnode属性 vue $parent

图一

一、规划键击事件

修改用户界面控件的默认行为不仅要考虑到用户如何通过鼠标访问新的控件功能,而且还要允许用户使用键盘操作。TreeView默认支持下列键击事件:

▲上下两个箭头键移动光标(变换当前被选中的节点)。

▲左右箭头键除了变换当前被选中的节点之外,兼具扩展/折叠节点功能。

▲ Enter键扩展或折叠节点。

TVEdit工程不改变这些默认的键击行为。但由于TreeView默认的键击事件不允许用户编辑其内容,所以我们要另外添加几个事件:

▲按Insert键在当前选中的节点之下插入一个新的节点。如果要添加一个新的根节点,按Ctrl+Insert键。用户按下Insert键之后,控件自动进入编辑状态,再按Enter键可退出编辑状态,控件自动选中父节点,以便用户只需按一下Insert键就可以在同一父节点之下插入新节点。

▲按Space键(或鼠标停留较长时间)使当前选中的节点进入编辑状态(也许有的人更乐意用Enter键进入编辑状态,但TreeView控件已经定义了Enter键的默认行为,所以这里不再用它)。

▲按Delete键删除当前选中的节点。如果被删除的节点包含子节点,所有子节点也被同时删除。

▲用鼠标拖放节点可改变节点在TreeView分层结构中的位置。如果被拖动的节点包含子节点,所有子节点也将被移动。

二、设计事件的句柄

在TVEdit工程中,TreeView控件的KeyDown事件句柄处理所有涉及键击的编辑操作,它用一个Select Case块判断用户按下的键,每一个Case语句对应一个键击事件。

当用户按下Space键,我们调用StartLabelEdit方法将节点转入编辑模式。如果被按下的是Delete键,则调用TreeView.Nodes集合的Remove方法删除当前选中的节点。对于Insert键,则用下面的代码在当前选中的节点下添加一个新节点,使新节点处于编辑模式:

Set currNode= SmartTreeView.Nodes.Add(SmartTreeView.SelectedItem, tvwChild)

currNode.Text=""

SmartTreeView.StartLabelEdit

如果用户按下了Ctrl+Insert键,通过下面的代码添加一个新的根节点并让它处于编辑状态:

If Shift And vbCtrlMask Then

Set currNode= SmartTreeView.Nodes.Add()

currNode.Selected= True

SmartTreeView.StartLabelEdit

End If

每一个节点必须有一个键——字符串形式的标识符。对于新添加的或编辑过的节点,我们在编辑操作结束时生成一个1到10000000之间的随机数字,加上前缀“K”,以此作为节点的键。由于Rnd()函数不保证随机数字的唯一性,所以我们使用了一个循环,如果第一次生成的键已经被使用,VB会触发一个错误,这时我们继续循环,寻找另外的键。

Dim Repeat As Boolean

Repeat= True

While Repeat

On Error Resume Next

SmartTreeView.SelectedItem.Key="K"& 1+ Int(Rnd()* 10000000)

If Err.Number= 0 Then Repeat= False

Wend

三、拖放操作

TreeView控件本身不支持内部节点的拖放操作,所以我们要实现OLE拖放事件的句柄。首先必须把控件的OLEDragMode属性设置成ccOLEDragAutomatic,把OLEDropMode属性设置成ccOLEDropManual。当用户开始拖动一个节点,控件触发OLEStartDrag事件:

Private Sub SmartTreeView_OLEStartDrag( _

Data As MSComctlLib.DataObject, _

AllowedEffects As Long)

Data.Clear

If Not Me.SmartTreeView.SelectedItem Is Nothing Then

Data.SetData Me.SmartTreeView.SelectedItem.Key,vbCFText

End If

End Sub

OLEStartDrag事件句柄把Data参数设置成被拖放节点的Key属性,稍后我们可以看到这个值的用处。当用户用鼠标拖着节点移动,VB触发OLEDragOver事件,下面给出了事件句柄的代码。当用户拖着节点经过其他节点时,其他节点不会自动以高亮度颜色显示,所以我们必须将TreeView控件的DropHighlight属性设置到适当的节点,以表明鼠标当前正处在该节点的位置上。鼠标所在位置的节点可通过控件的HitTest方法获知,HitTest方法的参数是指针的坐标。

Private Sub SmartTreeView_OLEDragOver _

(Data As MSComctlLib.DataObject, Effect As Long, _

Button As Integer, Shift As Integer, x As Single, _

y As Single, State As Integer)

With SmartTreeView

If State= vbLeave Then

Set.DropHighlight= Nothing

Else

.DropHighlight=.HitTest(x, y)

End If

End With

mfX= x

mfY= y

If y> 0 And y< 100 Then

m_iScrollDir=-1

Timer1.Enabled= True

ElseIf y>(SmartTreeView.Height- 200) And _

y< SmartTreeView.Height Then

m_iScrollDir= 1

Timer1.Enabled= True

Else

Timer1.Enabled= False

End If

End Sub

拖着节点经过其他可见的节点不存在什么问题,但要把节点拖到某个当前不在控件可见区域的节点就要复杂一些。为了实现这个功能,当鼠标拖着节点到达TreeView控件的顶部或底部时,我们必须强制TreeView滚动其可见区域。TVEdit工程利用了一个每200ms触发的Timer,以便分析当前鼠标指针所处的位置。如果鼠标拖着节点到达距离TreeView控件顶部或底部100 pixel的位置,控件显示的内容就必须滚动。有关这一技术的详细说明,有兴趣的读者可参见MSDN文章Q177743。

SmartTreeView_OLEDragOver事件句柄有几行代码用来判断是否要滚动控件以及开启Timer,但实际的滚动操作由Timer的事件句柄完成。

当用户拖着节点到达目的地后放开鼠标键,控件触发OLEDragDrop事件,这个事件句柄要提取出被拖动的节点,并把它放在当前高亮度显示的节点之下。前面我们把被拖动节点的Key放入了事件句柄的参数Data对象,现在可以利用这个Key方便地从Notes集合得到被拖动的节点,只要把这个节点的ParentNode属性设置成当前高亮度显示的节点,就完成了移动节点(及其所有子节点)的操作。注意被拖动的节点不能放入它自己的子节点之下,因为这会形成父子节点相互引用的循环引用关系。

Private Sub SmartTreeView_OLEDragDrop( _

Data As MSComctlLib.DataObject, Effect As Long, _

Button As Integer, Shift As Integer, x As Single, _

y As Single)

Dim strKey As String

Dim thisNode, DragNode As Node

Set oNode= Me.SmartTreeView.HitTest(x, y)

If Data.GetFormat(vbCFText) Then

strKey= Data.GetData(vbCFText)

Set oDragNode= SmartTreeView.Nodes(strKey)

On Error Resume Next

Set oDragNode.Parent= oNode

If Err.Number= 35614 Then

MsgBox"节点不能移动到此位置:不能创建循环引用关系。"

On Error GoTo 0

End If

Set SmartTreeView.DropHighlight= Nothing

End If

End Sub

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

vaela

documentFragment深入理解

DocumentFragment表示一个没有父级文件的最小文档对象。它被当做一个轻量版的 Document使用,用于存储已排好版的或尚未打理好格式的XML片段。最大的区别是因为DocumentFragment不是真实DOM树的一部分,它的变化不会引起DOM树的重新渲染的操作(reflow),且不会导致性能等问题。

DocumentFragment接口表示文档的一部分(或一段)。更确切地说,它表示一个或多个邻接的 Document节点和它们的所有子孙节点。 DocumentFragment节点不属于文档树,继承的 parentNode属性总是 null。不过它有一种特殊的行为,该行为使得它非常有用,即当请求把一个 DocumentFragment节点插入文档树时,插入的不是 DocumentFragment自身,而是它的所有子孙节点。这使得 DocumentFragment成了有用的占位符,暂时存放那些一次插入文档的节点。它还有利于实现文档的剪切、复制和粘贴操作,尤其是与 Range接口一起使用时更是如此。可以用 Document.createDocumentFragment()方法创建新的空 DocumentFragment节点

这样我们就明白了documentFragment的一些特性,它被修改的之后不会去渲染浏览器页面,不会引起浏览器的重绘与回流,我们可以把它作为一个中转站,把多次的dom操作汇聚到这一次来进行,把需要添加的dom元素都先添加到documentFragment中去,减少回流次数,就可以实现性能的优化了。

所以使用documentFragment来进行批量跟新的操作可以极大的节省性能。

好了,文章到此结束,希望可以帮助到大家。

零基础c语言书籍推荐,c语言自学先看哪本书c语言switch语句的用法详解(c语言中switch用法举例)