Skip to content

Commit 48ebd58

Browse files
committed
Added Closest again.
1 parent 56bb8fb commit 48ebd58

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

node-tree.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,16 @@ func (node *Node) IsTextNode() bool {
211211
// Adapted from [https://developer.mozilla.org/en-US/docs/Web/API/Element/closest](MDN Element: closest() method)
212212
func (node *Node) Closest(selector string) *Node {
213213
traverser := NewTraverser(node)
214-
214+
selectors := TokenizeSelectorsAndCombinators(selector)
215+
216+
for traverser.GetCurrentNode() != nil {
217+
if matchFromRightMostSelectors(traverser.GetCurrentNode(), selectors) {
218+
break
219+
} else if traverser.GetCurrentNode().GetPreviousNode() == nil {
220+
traverser.SetCurrentNodeTo(traverser.GetCurrentNode().GetParent())
221+
} else {
222+
traverser.Previous()
223+
}
224+
}
215225
return traverser.GetCurrentNode()
216226
}

node-tree_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ func TestRemoveNode(t *testing.T){
114114
//t.Log(GoHtml.NodeTreeToHTML(article))
115115
}
116116

117-
/*
118117
func TestClosest(t *testing.T){
119118
node, err := testFile4NodeTree()
120119
if err != nil{
@@ -125,13 +124,12 @@ func TestClosest(t *testing.T){
125124
t.Fatal("Node is nil.")
126125
}
127126

128-
node = node.Closest("ol .ordered-list")
127+
node = node.Closest("img+.ordered-list")
129128
if node == nil {
130129
t.Fatal("Node is nil")
131130
}else if node.GetTagName() != "ol"{
132131
t.Fatal("Unexpected element.")
133132
}
134133

135134

136-
}
137-
*/
135+
}

0 commit comments

Comments
 (0)