getElementsByXPath と getFirstElementByXPath
http://userscripts.org/scripts/review/8551
AutoPagerize version: 0.0.36 2009-03-08T14:43:37+09:00
function getElementsByXPath(xpath, node) { var nodesSnapshot = getXPathResult(xpath, node, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE) var data = [] for (var i = 0; i < nodesSnapshot.snapshotLength; i++) { data.push(nodesSnapshot.snapshotItem(i)) } return data }
function getFirstElementByXPath(xpath, node) { var result = getXPathResult(xpath, node, XPathResult.FIRST_ORDERED_NODE_TYPE) return result.singleNodeValue }
function getXPathResult(xpath, node, resultType) { var node = node || document var doc = node.ownerDocument || node var resolver = doc.createNSResolver(node.documentElement || node) // Use |node.lookupNamespaceURI('')| for Opera 9.5 var defaultNS = node.lookupNamespaceURI(null) if (defaultNS) { const defaultPrefix = '__default__' xpath = addDefaultPrefix(xpath, defaultPrefix) var defaultResolver = resolver resolver = function (prefix) { return (prefix == defaultPrefix) ? defaultNS : defaultResolver.lookupNamespaceURI(prefix) } } return doc.evaluate(xpath, node, resolver, resultType, null) }
getXPathResult と getElementsByXPath と getFirstElementByXPath 。