func (p NodeSet) H3() (ret NodeSet) {
	return p.dataAtom(atom.H3)
}
H3 returns NodeSet which node type is ElementNode and it's element type is `h3`.
package hdq
import (
	"fmt"
	"io"
	"os"
	"strconv"
	"strings"
	"golang.org/x/net/html"
	"golang.org/x/net/html/atom"
)
func (p NodeSet) Printf(w io.Writer, format string, params ...interface{}) NodeSet {
	if p.Err != nil {
		return p
	}
	p.Data.ForEach(func(node *html.Node) error {
		html.Render(w, node)
		fmt.Fprintf(w, format, params...)
		return nil
	})
	return p
}
func (p NodeSet) Dump() NodeSet {
	return p.Printf(os.Stdout, "\n\n")
}
func (p NodeSet) ChildEqualText(text string) (ret NodeSet) {
	return p.Match(func(node *html.Node) bool {
		return childEqualText(node, text)
	})
}
func (p NodeSet) TextEqual(text string) (ret NodeSet) {
	return p.Match(func(node *html.Node) bool {
		return equalText(node, text)
	})
}
func (p NodeSet) TextContains(text string) (ret NodeSet) {
	return p.Match(func(node *html.Node) bool {
		return containsText(node, text)
	})
}
func (p NodeSet) TextHasPrefix(text string) (ret NodeSet) {
	return p.Match(func(node *html.Node) bool {
		return hasPrefixText(node, text)
	})
}
func (p NodeSet) dataAtom(elem atom.Atom) (ret NodeSet) {
	return p.Match(func(node *html.Node) bool {
		return node.DataAtom == elem
	})
}
func (p NodeSet) Element(v interface{}) (ret NodeSet) {
	switch elem := v.(type) {
	case string:
		return p.Match(func(node *html.Node) bool {
			return node.Type == html.ElementNode && node.Data == elem
		})
	case atom.Atom:
		return p.Match(func(node *html.Node) bool {
			return node.DataAtom == elem
		})
	default:
		panic("unsupport argument type")
	}
}
func (p NodeSet) Attribute(k, v string) (ret NodeSet) {
	return p.Match(func(node *html.Node) bool {
		if node.Type != html.ElementNode {
			return false
		}
		for _, attr := range node.Attr {
			if attr.Key == k && attr.Val == v {
				return true
			}
		}
		return false
	})
}
func (p NodeSet) ContainsClass(v string) (ret NodeSet) {
	return p.Match(func(node *html.Node) bool {
		if node.Type != html.ElementNode {
			return false
		}
		for _, attr := range node.Attr {
			if attr.Key == "class" {
				return containsClass(attr.Val, v)
			}
		}
		return false
	})
}
func (p NodeSet) H1() (ret NodeSet) {
	return p.dataAtom(atom.H1)
}
func (p NodeSet) H2() (ret NodeSet) {
	return p.dataAtom(atom.H2)
}