Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // $XA
- //
- // $XA(exp, context, resolver).forEach(function(node){});
- function $XA (exp, context, resolver) {
- context || (context = document);
- var XPE = new XPathEvaluator();
- var Doc = context.ownerDocument || context, expr = XPE.createExpression(exp, resolver ? resolver :
- Doc.documentElement.namespaceURI ? function(prefix) {
- return XPE.createNSResolver(Doc.documentElement).lookupNamespaceURI(prefix) ||
- context.namespaceURI || document.documentElement.namespaceURI || "";
- } : null);
- var result = expr.evaluate(context, XPathResult.ANY_TYPE, null);
- switch (result.resultType) {
- case XPathResult.STRING_TYPE : return result.stringValue;
- case XPathResult.NUMBER_TYPE : return result.numberValue;
- case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
- case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
- result = expr.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, result);
- var length = result.snapshotLength;
- return {
- toA:function(){
- for (var i = 0, len = length, res = new Array(len); i < len; ++i)
- res[i] = result.snapshotItem(i);
- return res;
- },
- forEach:function(func, thisObject){
- for (var i = 0, len = length; i < len; ++i)
- func.call(thisObject,result.snapshotItem(i), i);
- },
- map:function(func, thisObject){
- for (var i = 0, len = length, res = []; i < len; ++i)
- res.push(func.call(thisObject,result.snapshotItem(i)));
- return res;
- },
- filter:function(func, thisObject){
- for (var i = 0, len = length, res = [], node; i < len; ++i)
- if (func.call(thisObject,node = result.snapshotItem(i))) res.push(node);
- return res;
- },
- mapfilter:function(func, thisObject){
- for (var i = 0, len = length, res = [], node; i < len; ++i)
- if (node = func.call(thisObject,result.snapshotItem(i))) res.push(node);
- return res;
- }
- };
- }
- return null;
- }
Add Comment
Please, Sign In to add comment