func Descendants(n *html.Node, cs ...Checker) Iter {
	c := And(cs...)
	s := NewStack()
	node := FirstChild(n)
	return func() *html.Node {
		for node != nil || s.Len() > 0 {
			if node != nil {
				s.Push(node)
				r := node
				node = FirstChild(node)
				if c(r) != nil {
					return r
				}
			} else {
				node = s.Pop()
				node = NextSibling(node)
			}
		}
		return nil
	}
}
Pre-order depth first traversal in all descendants
package expr
import (
	"strconv"
	"golang.org/x/net/html"
)
type Iter func() *html.Node