dgetty.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. /**
  2. * DomGetty - Very Very Simple Dom Selector Engine
  3. * - id : #
  4. * - class : .
  5. * - tag : tagname
  6. */
  7. (function(){
  8. var m, el, els;
  9. var filters = {
  10. '#': function(cnxt, expr){
  11. if ((m = /(\S*)#(\S+)/.exec(expr)) !== _NULL) {
  12. var tag = m[1];
  13. var id = m[2];
  14. if(!cnxt.getElementById) { //ie
  15. cnxt = cnxt.ownerDocument;
  16. }
  17. if (el = cnxt.getElementById(id)) {
  18. if (tag.length < 1 || el.nodeName.toLowerCase() == tag) {
  19. return [el];
  20. }
  21. }
  22. }
  23. return [];
  24. },
  25. '.': function(cnxt, expr){
  26. if ((m = /(\S*)\.(\S+)/.exec(expr)) !== _NULL) {
  27. var tag = ((m[1] === "") ? "*" : m[1]);
  28. var klass = m[2];
  29. if ((els = cnxt.getElementsByTagName(tag)).length > 0) {
  30. var results = [];
  31. for (var i=0; i<els.length; i++) {
  32. var el = els[i];
  33. if ( (new RegExp("(^| )" + klass + "($| )")).test(el.className)) {
  34. results.push(el);
  35. }
  36. }
  37. return results;
  38. }
  39. }
  40. return [];
  41. },
  42. '*': function(cnxt, expr){
  43. if ((els = cnxt.getElementsByTagName(expr)).length > 0) {
  44. var results = [];
  45. for (var i=0; i<els.length; i++) {
  46. results.push(els[i]);
  47. }
  48. return results;
  49. }
  50. return [];
  51. }
  52. };
  53. var match = function(cnxt, expr) {
  54. if (cnxt.length < 1) {
  55. return [];
  56. }
  57. var fltr;
  58. if ((f = /(\.|#)/.exec(expr)) !== _NULL) {
  59. if (filters[f[1]]) {
  60. fltr = f[1];
  61. }
  62. }
  63. fltr = fltr || "*";
  64. var results = [];
  65. for (var i = 0; i < cnxt.length; i++) {
  66. results = results.concat(filters[fltr](cnxt[i], expr));
  67. }
  68. return results;
  69. };
  70. var collect = function(cnxt, expr) {
  71. var els = [cnxt];
  72. var exprs = expr.split(" ");
  73. for (var j = 0; j < exprs.length; j++) {
  74. els = match(els, exprs[j]);
  75. }
  76. return els;
  77. };
  78. var DomGetty = function(context, selector, all) {
  79. all = !!all;
  80. if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
  81. return (all? []: _NULL);
  82. }
  83. if ( !selector || typeof selector !== "string" ) {
  84. return (all? []: _NULL);
  85. }
  86. var els;
  87. var mathes = [];
  88. var exprs = selector.split(",");
  89. for (var i = 0; i < exprs.length; i++) {
  90. els = collect(context, exprs[i]);
  91. if(els && els.length > 0) {
  92. mathes = mathes.concat(els);
  93. if(!all) {
  94. break;
  95. }
  96. }
  97. }
  98. if(all) {
  99. return mathes;
  100. } else {
  101. return mathes[0];
  102. }
  103. };
  104. /**
  105. * Get Element By Css Selector
  106. *
  107. * dGetty(element, selector) or dGetty(selector)
  108. * ex)
  109. * dGetty(document, "#wrapper div.article")
  110. * dGetty($tx("#wrapper"), "div.article")
  111. * dGetty("#wrapper div.article") -> default document
  112. */
  113. _WIN.dGetty = function() {
  114. var args = arguments;
  115. if(args.length == 1) {
  116. if(typeof (args[0]) === "string") {
  117. return DomGetty(_DOC, args[0]);
  118. }
  119. } else if(args.length == 2) {
  120. if(args[0].nodeType && typeof (args[1]) === "string") {
  121. return DomGetty(args[0], args[1]);
  122. }
  123. }
  124. return _NULL;
  125. };
  126. /**
  127. * Get Element List By Css Selector
  128. *
  129. * dGetties(element, selector) or dGetties(selector)
  130. * ex)
  131. * dGetties(document, "#wrapper div.article")
  132. * dGetties($tx("#wrapper"), "div.article")
  133. * dGetties("#wrapper div.article") -> default document
  134. */
  135. _WIN.dGetties = function() {
  136. var args = arguments;
  137. if(args.length == 1) {
  138. if(typeof (args[0]) === "string") {
  139. return DomGetty(_DOC, args[0], _TRUE);
  140. }
  141. } else if(args.length == 2) {
  142. if(args[0].nodeType && typeof (args[1]) === "string") {
  143. return DomGetty(args[0], args[1], _TRUE);
  144. }
  145. }
  146. return [];
  147. };
  148. })();
  149. /**
  150. * DomChecky - Very Very Simple Dom Check Engine By Selector
  151. * - id : #
  152. * - class : .
  153. * - tag : tagname
  154. */
  155. (function(){
  156. var m, el, els;
  157. var filters = {
  158. '#': function(cnxt, expr){
  159. if ((m = /(\S*)#(\S+)/.exec(expr)) !== _NULL) {
  160. var tag = m[1];
  161. var id = m[2];
  162. if (tag.length < 1 || cnxt.nodeName.toLowerCase() == tag) {
  163. if (cnxt.id == id) {
  164. return _TRUE;
  165. }
  166. }
  167. }
  168. return _FALSE;
  169. },
  170. '.': function(cnxt, expr){
  171. if ((m = /(\S*)\.(\S+)/.exec(expr)) !== _NULL) {
  172. var tag = m[1];
  173. var klass = m[2];
  174. if (tag.length < 1 || cnxt.nodeName.toLowerCase() == tag) {
  175. if (cnxt.className.indexOf(klass) > -1) {
  176. return _TRUE;
  177. }
  178. }
  179. }
  180. return _FALSE;
  181. },
  182. '*': function(cnxt, expr){
  183. var tag = expr;
  184. if (cnxt.nodeName.toLowerCase() == tag) {
  185. return _TRUE;
  186. }
  187. return _FALSE;
  188. }
  189. };
  190. var check = function(cnxt, expr) {
  191. var fltr;
  192. if ((f = /(\.|#)/.exec(expr)) !== _NULL) {
  193. if (filters[f[1]]) {
  194. fltr = f[1];
  195. }
  196. }
  197. fltr = fltr || "*";
  198. return filters[fltr](cnxt, expr);
  199. };
  200. var DomChecky = function(context, selector) {
  201. if ( context.nodeType !== 1) {
  202. return _FALSE;
  203. }
  204. var found = _FALSE;
  205. var exprs = selector.split(",");
  206. for (var i = 0; i < exprs.length; i++) {
  207. found = check(context, exprs[i]);
  208. if(found) {
  209. break;
  210. }
  211. }
  212. return found;
  213. };
  214. /**
  215. * Check Element By Css Selector
  216. * @returns boolean
  217. *
  218. * dChecky(element, selector)
  219. * ex)
  220. * dChecky(document, "#wrapper")
  221. */
  222. _WIN.dChecky = function() {
  223. var args = arguments;
  224. if(args.length == 2) {
  225. if(args[0].nodeType && typeof (args[1]) === "string") {
  226. return DomChecky(args[0], args[1]);
  227. }
  228. }
  229. return _FALSE;
  230. };
  231. })();