| 806 | } |
| 807 | |
| 808 | func (f *filterQuery) Select(t iterator) NodeNavigator { |
| 809 | if f.positmap == nil { |
| 810 | f.positmap = make(map[int]int) |
| 811 | } |
| 812 | for { |
| 813 | |
| 814 | node := f.Input.Select(t) |
| 815 | if node == nil { |
| 816 | return nil |
| 817 | } |
| 818 | node = node.Copy() |
| 819 | |
| 820 | t.Current().MoveTo(node) |
| 821 | if f.do(t) { |
| 822 | // fix https://github.com/antchfx/htmlquery/issues/26 |
| 823 | // Calculate and keep the each of matching node's position in the same depth. |
| 824 | level := getNodeDepth(f.Input) |
| 825 | f.positmap[level]++ |
| 826 | f.posit = f.positmap[level] |
| 827 | return node |
| 828 | } |
| 829 | } |
| 830 | } |
| 831 | |
| 832 | func (f *filterQuery) Evaluate(t iterator) interface{} { |
| 833 | f.Input.Evaluate(t) |