Guest User

Untitled

a guest
Feb 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. // $XA
  2. //
  3. // $XA(exp, context, resolver).forEach(function(node){});
  4. function $XA (exp, context, resolver) {
  5. context || (context = document);
  6. var XPE = new XPathEvaluator();
  7. var Doc = context.ownerDocument || context, expr = XPE.createExpression(exp, resolver ? resolver :
  8. Doc.documentElement.namespaceURI ? function(prefix) {
  9. return XPE.createNSResolver(Doc.documentElement).lookupNamespaceURI(prefix) ||
  10. context.namespaceURI || document.documentElement.namespaceURI || "";
  11. } : null);
  12. var result = expr.evaluate(context, XPathResult.ANY_TYPE, null);
  13. switch (result.resultType) {
  14. case XPathResult.STRING_TYPE : return result.stringValue;
  15. case XPathResult.NUMBER_TYPE : return result.numberValue;
  16. case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
  17. case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
  18. result = expr.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, result);
  19. var length = result.snapshotLength;
  20. return {
  21. toA:function(){
  22. for (var i = 0, len = length, res = new Array(len); i < len; ++i)
  23. res[i] = result.snapshotItem(i);
  24. return res;
  25. },
  26. forEach:function(func, thisObject){
  27. for (var i = 0, len = length; i < len; ++i)
  28. func.call(thisObject,result.snapshotItem(i), i);
  29. },
  30. map:function(func, thisObject){
  31. for (var i = 0, len = length, res = []; i < len; ++i)
  32. res.push(func.call(thisObject,result.snapshotItem(i)));
  33. return res;
  34. },
  35. filter:function(func, thisObject){
  36. for (var i = 0, len = length, res = [], node; i < len; ++i)
  37. if (func.call(thisObject,node = result.snapshotItem(i))) res.push(node);
  38. return res;
  39. },
  40. mapfilter:function(func, thisObject){
  41. for (var i = 0, len = length, res = [], node; i < len; ++i)
  42. if (node = func.call(thisObject,result.snapshotItem(i))) res.push(node);
  43. return res;
  44. }
  45. };
  46. }
  47. return null;
  48. }
Add Comment
Please, Sign In to add comment