dom.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:11k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.dom");
  9. dojo.dom.ELEMENT_NODE = 1;
  10. dojo.dom.ATTRIBUTE_NODE = 2;
  11. dojo.dom.TEXT_NODE = 3;
  12. dojo.dom.CDATA_SECTION_NODE = 4;
  13. dojo.dom.ENTITY_REFERENCE_NODE = 5;
  14. dojo.dom.ENTITY_NODE = 6;
  15. dojo.dom.PROCESSING_INSTRUCTION_NODE = 7;
  16. dojo.dom.COMMENT_NODE = 8;
  17. dojo.dom.DOCUMENT_NODE = 9;
  18. dojo.dom.DOCUMENT_TYPE_NODE = 10;
  19. dojo.dom.DOCUMENT_FRAGMENT_NODE = 11;
  20. dojo.dom.NOTATION_NODE = 12;
  21. dojo.dom.dojoml = "http://www.dojotoolkit.org/2004/dojoml";
  22. dojo.dom.xmlns = {svg:"http://www.w3.org/2000/svg", smil:"http://www.w3.org/2001/SMIL20/", mml:"http://www.w3.org/1998/Math/MathML", cml:"http://www.xml-cml.org", xlink:"http://www.w3.org/1999/xlink", xhtml:"http://www.w3.org/1999/xhtml", xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", xbl:"http://www.mozilla.org/xbl", fo:"http://www.w3.org/1999/XSL/Format", xsl:"http://www.w3.org/1999/XSL/Transform", xslt:"http://www.w3.org/1999/XSL/Transform", xi:"http://www.w3.org/2001/XInclude", xforms:"http://www.w3.org/2002/01/xforms", saxon:"http://icl.com/saxon", xalan:"http://xml.apache.org/xslt", xsd:"http://www.w3.org/2001/XMLSchema", dt:"http://www.w3.org/2001/XMLSchema-datatypes", xsi:"http://www.w3.org/2001/XMLSchema-instance", rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#", rdfs:"http://www.w3.org/2000/01/rdf-schema#", dc:"http://purl.org/dc/elements/1.1/", dcq:"http://purl.org/dc/qualifiers/1.0", "soap-env":"http://schemas.xmlsoap.org/soap/envelope/", wsdl:"http://schemas.xmlsoap.org/wsdl/", AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
  23. dojo.dom.isNode = function (wh) {
  24. if (typeof Element == "function") {
  25. try {
  26. return wh instanceof Element;
  27. }
  28. catch (e) {
  29. }
  30. } else {
  31. return wh && !isNaN(wh.nodeType);
  32. }
  33. };
  34. dojo.dom.getUniqueId = function () {
  35. var _document = dojo.doc();
  36. do {
  37. var id = "dj_unique_" + (++arguments.callee._idIncrement);
  38. } while (_document.getElementById(id));
  39. return id;
  40. };
  41. dojo.dom.getUniqueId._idIncrement = 0;
  42. dojo.dom.firstElement = dojo.dom.getFirstChildElement = function (parentNode, tagName) {
  43. var node = parentNode.firstChild;
  44. while (node && node.nodeType != dojo.dom.ELEMENT_NODE) {
  45. node = node.nextSibling;
  46. }
  47. if (tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
  48. node = dojo.dom.nextElement(node, tagName);
  49. }
  50. return node;
  51. };
  52. dojo.dom.lastElement = dojo.dom.getLastChildElement = function (parentNode, tagName) {
  53. var node = parentNode.lastChild;
  54. while (node && node.nodeType != dojo.dom.ELEMENT_NODE) {
  55. node = node.previousSibling;
  56. }
  57. if (tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
  58. node = dojo.dom.prevElement(node, tagName);
  59. }
  60. return node;
  61. };
  62. dojo.dom.nextElement = dojo.dom.getNextSiblingElement = function (node, tagName) {
  63. if (!node) {
  64. return null;
  65. }
  66. do {
  67. node = node.nextSibling;
  68. } while (node && node.nodeType != dojo.dom.ELEMENT_NODE);
  69. if (node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
  70. return dojo.dom.nextElement(node, tagName);
  71. }
  72. return node;
  73. };
  74. dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement = function (node, tagName) {
  75. if (!node) {
  76. return null;
  77. }
  78. if (tagName) {
  79. tagName = tagName.toLowerCase();
  80. }
  81. do {
  82. node = node.previousSibling;
  83. } while (node && node.nodeType != dojo.dom.ELEMENT_NODE);
  84. if (node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
  85. return dojo.dom.prevElement(node, tagName);
  86. }
  87. return node;
  88. };
  89. dojo.dom.moveChildren = function (srcNode, destNode, trim) {
  90. var count = 0;
  91. if (trim) {
  92. while (srcNode.hasChildNodes() && srcNode.firstChild.nodeType == dojo.dom.TEXT_NODE) {
  93. srcNode.removeChild(srcNode.firstChild);
  94. }
  95. while (srcNode.hasChildNodes() && srcNode.lastChild.nodeType == dojo.dom.TEXT_NODE) {
  96. srcNode.removeChild(srcNode.lastChild);
  97. }
  98. }
  99. while (srcNode.hasChildNodes()) {
  100. destNode.appendChild(srcNode.firstChild);
  101. count++;
  102. }
  103. return count;
  104. };
  105. dojo.dom.copyChildren = function (srcNode, destNode, trim) {
  106. var clonedNode = srcNode.cloneNode(true);
  107. return this.moveChildren(clonedNode, destNode, trim);
  108. };
  109. dojo.dom.replaceChildren = function (node, newChild) {
  110. var nodes = [];
  111. if (dojo.render.html.ie) {
  112. for (var i = 0; i < node.childNodes.length; i++) {
  113. nodes.push(node.childNodes[i]);
  114. }
  115. }
  116. dojo.dom.removeChildren(node);
  117. node.appendChild(newChild);
  118. for (var i = 0; i < nodes.length; i++) {
  119. dojo.dom.destroyNode(nodes[i]);
  120. }
  121. };
  122. dojo.dom.removeChildren = function (node) {
  123. var count = node.childNodes.length;
  124. while (node.hasChildNodes()) {
  125. dojo.dom.removeNode(node.firstChild);
  126. }
  127. return count;
  128. };
  129. dojo.dom.replaceNode = function (node, newNode) {
  130. return node.parentNode.replaceChild(newNode, node);
  131. };
  132. dojo.dom.destroyNode = function (node) {
  133. if (node.parentNode) {
  134. node = dojo.dom.removeNode(node);
  135. }
  136. if (node.nodeType != 3) {
  137. if (dojo.evalObjPath("dojo.event.browser.clean", false)) {
  138. dojo.event.browser.clean(node);
  139. }
  140. if (dojo.render.html.ie) {
  141. node.outerHTML = "";
  142. }
  143. }
  144. };
  145. dojo.dom.removeNode = function (node) {
  146. if (node && node.parentNode) {
  147. return node.parentNode.removeChild(node);
  148. }
  149. };
  150. dojo.dom.getAncestors = function (node, filterFunction, returnFirstHit) {
  151. var ancestors = [];
  152. var isFunction = (filterFunction && (filterFunction instanceof Function || typeof filterFunction == "function"));
  153. while (node) {
  154. if (!isFunction || filterFunction(node)) {
  155. ancestors.push(node);
  156. }
  157. if (returnFirstHit && ancestors.length > 0) {
  158. return ancestors[0];
  159. }
  160. node = node.parentNode;
  161. }
  162. if (returnFirstHit) {
  163. return null;
  164. }
  165. return ancestors;
  166. };
  167. dojo.dom.getAncestorsByTag = function (node, tag, returnFirstHit) {
  168. tag = tag.toLowerCase();
  169. return dojo.dom.getAncestors(node, function (el) {
  170. return ((el.tagName) && (el.tagName.toLowerCase() == tag));
  171. }, returnFirstHit);
  172. };
  173. dojo.dom.getFirstAncestorByTag = function (node, tag) {
  174. return dojo.dom.getAncestorsByTag(node, tag, true);
  175. };
  176. dojo.dom.isDescendantOf = function (node, ancestor, guaranteeDescendant) {
  177. if (guaranteeDescendant && node) {
  178. node = node.parentNode;
  179. }
  180. while (node) {
  181. if (node == ancestor) {
  182. return true;
  183. }
  184. node = node.parentNode;
  185. }
  186. return false;
  187. };
  188. dojo.dom.innerXML = function (node) {
  189. if (node.innerXML) {
  190. return node.innerXML;
  191. } else {
  192. if (node.xml) {
  193. return node.xml;
  194. } else {
  195. if (typeof XMLSerializer != "undefined") {
  196. return (new XMLSerializer()).serializeToString(node);
  197. }
  198. }
  199. }
  200. };
  201. dojo.dom.createDocument = function () {
  202. var doc = null;
  203. var _document = dojo.doc();
  204. if (!dj_undef("ActiveXObject")) {
  205. var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
  206. for (var i = 0; i < prefixes.length; i++) {
  207. try {
  208. doc = new ActiveXObject(prefixes[i] + ".XMLDOM");
  209. }
  210. catch (e) {
  211. }
  212. if (doc) {
  213. break;
  214. }
  215. }
  216. } else {
  217. if ((_document.implementation) && (_document.implementation.createDocument)) {
  218. doc = _document.implementation.createDocument("", "", null);
  219. }
  220. }
  221. return doc;
  222. };
  223. dojo.dom.createDocumentFromText = function (str, mimetype) {
  224. if (!mimetype) {
  225. mimetype = "text/xml";
  226. }
  227. if (!dj_undef("DOMParser")) {
  228. var parser = new DOMParser();
  229. return parser.parseFromString(str, mimetype);
  230. } else {
  231. if (!dj_undef("ActiveXObject")) {
  232. var domDoc = dojo.dom.createDocument();
  233. if (domDoc) {
  234. domDoc.async = false;
  235. domDoc.loadXML(str);
  236. return domDoc;
  237. } else {
  238. dojo.debug("toXml didn't work?");
  239. }
  240. } else {
  241. var _document = dojo.doc();
  242. if (_document.createElement) {
  243. var tmp = _document.createElement("xml");
  244. tmp.innerHTML = str;
  245. if (_document.implementation && _document.implementation.createDocument) {
  246. var xmlDoc = _document.implementation.createDocument("foo", "", null);
  247. for (var i = 0; i < tmp.childNodes.length; i++) {
  248. xmlDoc.importNode(tmp.childNodes.item(i), true);
  249. }
  250. return xmlDoc;
  251. }
  252. return ((tmp.document) && (tmp.document.firstChild ? tmp.document.firstChild : tmp));
  253. }
  254. }
  255. }
  256. return null;
  257. };
  258. dojo.dom.prependChild = function (node, parent) {
  259. if (parent.firstChild) {
  260. parent.insertBefore(node, parent.firstChild);
  261. } else {
  262. parent.appendChild(node);
  263. }
  264. return true;
  265. };
  266. dojo.dom.insertBefore = function (node, ref, force) {
  267. if ((force != true) && (node === ref || node.nextSibling === ref)) {
  268. return false;
  269. }
  270. var parent = ref.parentNode;
  271. parent.insertBefore(node, ref);
  272. return true;
  273. };
  274. dojo.dom.insertAfter = function (node, ref, force) {
  275. var pn = ref.parentNode;
  276. if (ref == pn.lastChild) {
  277. if ((force != true) && (node === ref)) {
  278. return false;
  279. }
  280. pn.appendChild(node);
  281. } else {
  282. return this.insertBefore(node, ref.nextSibling, force);
  283. }
  284. return true;
  285. };
  286. dojo.dom.insertAtPosition = function (node, ref, position) {
  287. if ((!node) || (!ref) || (!position)) {
  288. return false;
  289. }
  290. switch (position.toLowerCase()) {
  291.   case "before":
  292. return dojo.dom.insertBefore(node, ref);
  293.   case "after":
  294. return dojo.dom.insertAfter(node, ref);
  295.   case "first":
  296. if (ref.firstChild) {
  297. return dojo.dom.insertBefore(node, ref.firstChild);
  298. } else {
  299. ref.appendChild(node);
  300. return true;
  301. }
  302. break;
  303.   default:
  304. ref.appendChild(node);
  305. return true;
  306. }
  307. };
  308. dojo.dom.insertAtIndex = function (node, containingNode, insertionIndex) {
  309. var siblingNodes = containingNode.childNodes;
  310. if (!siblingNodes.length || siblingNodes.length == insertionIndex) {
  311. containingNode.appendChild(node);
  312. return true;
  313. }
  314. if (insertionIndex == 0) {
  315. return dojo.dom.prependChild(node, containingNode);
  316. }
  317. return dojo.dom.insertAfter(node, siblingNodes[insertionIndex - 1]);
  318. };
  319. dojo.dom.textContent = function (node, text) {
  320. if (arguments.length > 1) {
  321. var _document = dojo.doc();
  322. dojo.dom.replaceChildren(node, _document.createTextNode(text));
  323. return text;
  324. } else {
  325. if (node.textContent != undefined) {
  326. return node.textContent;
  327. }
  328. var _result = "";
  329. if (node == null) {
  330. return _result;
  331. }
  332. for (var i = 0; i < node.childNodes.length; i++) {
  333. switch (node.childNodes[i].nodeType) {
  334.   case 1:
  335.   case 5:
  336. _result += dojo.dom.textContent(node.childNodes[i]);
  337. break;
  338.   case 3:
  339.   case 2:
  340.   case 4:
  341. _result += node.childNodes[i].nodeValue;
  342. break;
  343.   default:
  344. break;
  345. }
  346. }
  347. return _result;
  348. }
  349. };
  350. dojo.dom.hasParent = function (node) {
  351. return Boolean(node && node.parentNode && dojo.dom.isNode(node.parentNode));
  352. };
  353. dojo.dom.isTag = function (node) {
  354. if (node && node.tagName) {
  355. for (var i = 1; i < arguments.length; i++) {
  356. if (node.tagName == String(arguments[i])) {
  357. return String(arguments[i]);
  358. }
  359. }
  360. }
  361. return "";
  362. };
  363. dojo.dom.setAttributeNS = function (elem, namespaceURI, attrName, attrValue) {
  364. if (elem == null || ((elem == undefined) && (typeof elem == "undefined"))) {
  365. dojo.raise("No element given to dojo.dom.setAttributeNS");
  366. }
  367. if (!((elem.setAttributeNS == undefined) && (typeof elem.setAttributeNS == "undefined"))) {
  368. elem.setAttributeNS(namespaceURI, attrName, attrValue);
  369. } else {
  370. var ownerDoc = elem.ownerDocument;
  371. var attribute = ownerDoc.createNode(2, attrName, namespaceURI);
  372. attribute.nodeValue = attrValue;
  373. elem.setAttributeNode(attribute);
  374. }
  375. };