<% '----------------------------------------------------------- ' Class TElement 基础类 '----------------------------------------------------------- Class TElement Private FName,FTag,FSingle,FInnerHtml,FAddAttr Private FAttrs,FChilds,FParent,FPage Private FOrigin,FOwner Dim SINGLE_TAG Sub class_initialize FSingle = False Set FOrigin = me Set FOwner = me SINGLE_TAG = "img|br|hr|input|link|meta" Set FAttrs = sys.getObj(SO_DICT) End Sub Sub class_Terminate If isobject(FAttrs) Then Set FAttrs = Nothing If isobject(FChilds) Then Set FChilds = nothing End Sub '------------------------ property begin ---------------------------- Property Let Name(ByVal value) If Trim(value) = "" Then Exit Property Dim oldName : oldName = FName FName = value If IsObject(FPage) And oldName <> "" Then '保持名字唯一 FPage.ChangeName oldName,value End If End Property Property get Name() Name = FName End Property Property Let Tag(ByVal value) FTag = LCase(Trim(value)) Call checkTag End Property Property get Tag() Tag = FTag End Property Property Let IsSingle(ByVal value) FSingle = value End Property Property Let InnerHtml(ByVal value) FInnerHtml = value End Property Property get InnerHtml() Dim html : html = "" If FInnerHtml <> "" Then html = FInnerHtml Else html = ChildHtml End If InnerHtml = html End Property Property Let AddAttr(ByVal value) 'write only FAddAttr = value End Property Property let Attribute(ByVal key,ByVal value) If FAttrs.exists(key) then FAttrs(key) = sys.toStr(value) Else FAttrs.add key,sys.toStr(value) End if End Property Property get Attribute(ByVal key) If FAttrs.exists(key) then Attribute = FAttrs(key) End If End Property Private Property Get Attr() Dim i,keys,items,sAttr : sAttr = "" keys = FAttrs.keys items = FAttrs.items For i = 0 To FAttrs.count - 1 If items(i) <> "" or keys(i) = "value" then sAttr = sAttr & keys(i) & "=""" & items(i) & """ " End If Next If FAddAttr <> "" Then sAttr = sAttr & FAddAttr If sAttr <> "" Then sAttr = " " & rTrim(sAttr) Attr = sAttr End Property Private Property get ChildHtml() Dim chs,i,html : html = "" If IsObject(FChilds) Then chs = FChilds.items For i = 0 To FChilds.count - 1 html = html & Chr(9) & chs(i).Origin.Html & vbCrLf Next End If If html <> "" Then html = vbCrLf & html ChildHtml = html End Property Property Get Html() 'read only If FTag = "" Then ''.. html = InnerHtml Exit Property End If If FSingle Then Html = "<" & FTag & Attr & " />" Else Html = "<" & FTag & Attr & ">" & InnerHtml & "</" & FTag & ">" End If End Property Property set Page(value) 'write only value.AddElement me Set Fpage = value End Property Property get Parent() Set Parent = FParent End Property Property Set Parent(ByRef value) ' 改变当前Parent If IsObject(value) Then If IsObject(FParent) Then FParent.removeChild me value.AddChild me ' 里头改变me.Parent End if End Property Property Get Childs() ' return dictionary If Not IsObject(FChilds) Then Set FChilds = sys.getObj(SO_DICT) Set Childs = FChilds End Property Property Get Origin() ' read only Set Origin = FOrigin End Property Property Get Owner() Set Owner = FOwner End Property Property set Owner(value) Set FOwner = value End Property Property Get Child(key) ' return element If Not IsObject(FChilds) Then Exit property If FChilds.exists(key) Then Set Child = FChilds.item(key) End Property Property Get FirstChild() ' return element Dim keys If IsObject(FChilds) Then If Fchilds.count > 0 Then keys = FChilds.keys set FirstChild = FChilds.item(keys(0)) End If End if End property '================================ property end ================================== Private Sub checkTag Dim i,tags tags = Split(SINGLE_TAG,"|") For i = lbound(tags) To ubound(tags) If tags(i) = FTag Then FSingle = True Exit For End if next End Sub Sub setParent(ByRef value) Set FParent = value End Sub Sub AddChild(ByRef child) If Not IsObject(child) Then Exit sub Dim name ' Origin 指向原件或自己 If child.Origin.name = "" Then name = child.Origin.Tag & "_" & CStr(Childs.count) Else name = child.Origin.name End If If Childs.exists(name)Then sys.print "Element name repeat:" & name sys.halt Else Childs.add name,child.Origin End If child.Origin.setParent me '更新Parent End sub Sub removeChild(ByRef child) Dim name name = child.Origin.name If Childs.exists(name)Then Childs.remove name End if End Sub Sub echo sys.print Html End sub End Class %>