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

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.require("dojo.html.common");
  9. dojo.provide("dojo.html.selection");
  10. dojo.require("dojo.dom");
  11. dojo.require("dojo.lang.common");
  12. dojo.html.selectionType = {NONE:0, TEXT:1, CONTROL:2};
  13. dojo.html.clearSelection = function () {
  14. var _window = dojo.global();
  15. var _document = dojo.doc();
  16. try {
  17. if (_window["getSelection"]) {
  18. if (dojo.render.html.safari) {
  19. _window.getSelection().collapse();
  20. } else {
  21. _window.getSelection().removeAllRanges();
  22. }
  23. } else {
  24. if (_document.selection) {
  25. if (_document.selection.empty) {
  26. _document.selection.empty();
  27. } else {
  28. if (_document.selection.clear) {
  29. _document.selection.clear();
  30. }
  31. }
  32. }
  33. }
  34. return true;
  35. }
  36. catch (e) {
  37. dojo.debug(e);
  38. return false;
  39. }
  40. };
  41. dojo.html.disableSelection = function (element) {
  42. element = dojo.byId(element) || dojo.body();
  43. var h = dojo.render.html;
  44. if (h.mozilla) {
  45. element.style.MozUserSelect = "none";
  46. } else {
  47. if (h.safari) {
  48. element.style.KhtmlUserSelect = "none";
  49. } else {
  50. if (h.ie) {
  51. element.unselectable = "on";
  52. } else {
  53. return false;
  54. }
  55. }
  56. }
  57. return true;
  58. };
  59. dojo.html.enableSelection = function (element) {
  60. element = dojo.byId(element) || dojo.body();
  61. var h = dojo.render.html;
  62. if (h.mozilla) {
  63. element.style.MozUserSelect = "";
  64. } else {
  65. if (h.safari) {
  66. element.style.KhtmlUserSelect = "";
  67. } else {
  68. if (h.ie) {
  69. element.unselectable = "off";
  70. } else {
  71. return false;
  72. }
  73. }
  74. }
  75. return true;
  76. };
  77. dojo.html.selectElement = function (element) {
  78. dojo.deprecated("dojo.html.selectElement", "replaced by dojo.html.selection.selectElementChildren", 0.5);
  79. };
  80. dojo.html.selectInputText = function (element) {
  81. var _window = dojo.global();
  82. var _document = dojo.doc();
  83. element = dojo.byId(element);
  84. if (_document["selection"] && dojo.body()["createTextRange"]) {
  85. var range = element.createTextRange();
  86. range.moveStart("character", 0);
  87. range.moveEnd("character", element.value.length);
  88. range.select();
  89. } else {
  90. if (_window["getSelection"]) {
  91. var selection = _window.getSelection();
  92. element.setSelectionRange(0, element.value.length);
  93. }
  94. }
  95. element.focus();
  96. };
  97. dojo.html.isSelectionCollapsed = function () {
  98. dojo.deprecated("dojo.html.isSelectionCollapsed", "replaced by dojo.html.selection.isCollapsed", 0.5);
  99. return dojo.html.selection.isCollapsed();
  100. };
  101. dojo.lang.mixin(dojo.html.selection, {getType:function () {
  102. if (dojo.doc()["selection"]) {
  103. return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
  104. } else {
  105. var stype = dojo.html.selectionType.TEXT;
  106. var oSel;
  107. try {
  108. oSel = dojo.global().getSelection();
  109. }
  110. catch (e) {
  111. }
  112. if (oSel && oSel.rangeCount == 1) {
  113. var oRange = oSel.getRangeAt(0);
  114. if (oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1 && oRange.startContainer.nodeType != dojo.dom.TEXT_NODE) {
  115. stype = dojo.html.selectionType.CONTROL;
  116. }
  117. }
  118. return stype;
  119. }
  120. }, isCollapsed:function () {
  121. var _window = dojo.global();
  122. var _document = dojo.doc();
  123. if (_document["selection"]) {
  124. return _document.selection.createRange().text == "";
  125. } else {
  126. if (_window["getSelection"]) {
  127. var selection = _window.getSelection();
  128. if (dojo.lang.isString(selection)) {
  129. return selection == "";
  130. } else {
  131. return selection.isCollapsed || selection.toString() == "";
  132. }
  133. }
  134. }
  135. }, getSelectedElement:function () {
  136. if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
  137. if (dojo.doc()["selection"]) {
  138. var range = dojo.doc().selection.createRange();
  139. if (range && range.item) {
  140. return dojo.doc().selection.createRange().item(0);
  141. }
  142. } else {
  143. var selection = dojo.global().getSelection();
  144. return selection.anchorNode.childNodes[selection.anchorOffset];
  145. }
  146. }
  147. }, getParentElement:function () {
  148. if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
  149. var p = dojo.html.selection.getSelectedElement();
  150. if (p) {
  151. return p.parentNode;
  152. }
  153. } else {
  154. if (dojo.doc()["selection"]) {
  155. return dojo.doc().selection.createRange().parentElement();
  156. } else {
  157. var selection = dojo.global().getSelection();
  158. if (selection) {
  159. var node = selection.anchorNode;
  160. while (node && node.nodeType != dojo.dom.ELEMENT_NODE) {
  161. node = node.parentNode;
  162. }
  163. return node;
  164. }
  165. }
  166. }
  167. }, getSelectedText:function () {
  168. if (dojo.doc()["selection"]) {
  169. if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
  170. return null;
  171. }
  172. return dojo.doc().selection.createRange().text;
  173. } else {
  174. var selection = dojo.global().getSelection();
  175. if (selection) {
  176. return selection.toString();
  177. }
  178. }
  179. }, getSelectedHtml:function () {
  180. if (dojo.doc()["selection"]) {
  181. if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
  182. return null;
  183. }
  184. return dojo.doc().selection.createRange().htmlText;
  185. } else {
  186. var selection = dojo.global().getSelection();
  187. if (selection && selection.rangeCount) {
  188. var frag = selection.getRangeAt(0).cloneContents();
  189. var div = document.createElement("div");
  190. div.appendChild(frag);
  191. return div.innerHTML;
  192. }
  193. return null;
  194. }
  195. }, hasAncestorElement:function (tagName) {
  196. return (dojo.html.selection.getAncestorElement.apply(this, arguments) != null);
  197. }, getAncestorElement:function (tagName) {
  198. var node = dojo.html.selection.getSelectedElement() || dojo.html.selection.getParentElement();
  199. while (node) {
  200. if (dojo.html.selection.isTag(node, arguments).length > 0) {
  201. return node;
  202. }
  203. node = node.parentNode;
  204. }
  205. return null;
  206. }, isTag:function (node, tags) {
  207. if (node && node.tagName) {
  208. for (var i = 0; i < tags.length; i++) {
  209. if (node.tagName.toLowerCase() == String(tags[i]).toLowerCase()) {
  210. return String(tags[i]).toLowerCase();
  211. }
  212. }
  213. }
  214. return "";
  215. }, selectElement:function (element) {
  216. var _window = dojo.global();
  217. var _document = dojo.doc();
  218. element = dojo.byId(element);
  219. if (_document.selection && dojo.body().createTextRange) {
  220. try {
  221. var range = dojo.body().createControlRange();
  222. range.addElement(element);
  223. range.select();
  224. }
  225. catch (e) {
  226. dojo.html.selection.selectElementChildren(element);
  227. }
  228. } else {
  229. if (_window["getSelection"]) {
  230. var selection = _window.getSelection();
  231. if (selection["removeAllRanges"]) {
  232. var range = _document.createRange();
  233. range.selectNode(element);
  234. selection.removeAllRanges();
  235. selection.addRange(range);
  236. }
  237. }
  238. }
  239. }, selectElementChildren:function (element) {
  240. var _window = dojo.global();
  241. var _document = dojo.doc();
  242. element = dojo.byId(element);
  243. if (_document.selection && dojo.body().createTextRange) {
  244. var range = dojo.body().createTextRange();
  245. range.moveToElementText(element);
  246. range.select();
  247. } else {
  248. if (_window["getSelection"]) {
  249. var selection = _window.getSelection();
  250. if (selection["setBaseAndExtent"]) {
  251. selection.setBaseAndExtent(element, 0, element, element.innerText.length - 1);
  252. } else {
  253. if (selection["selectAllChildren"]) {
  254. selection.selectAllChildren(element);
  255. }
  256. }
  257. }
  258. }
  259. }, getBookmark:function () {
  260. var bookmark;
  261. var _document = dojo.doc();
  262. if (_document["selection"]) {
  263. var range = _document.selection.createRange();
  264. bookmark = range.getBookmark();
  265. } else {
  266. var selection;
  267. try {
  268. selection = dojo.global().getSelection();
  269. }
  270. catch (e) {
  271. }
  272. if (selection) {
  273. var range = selection.getRangeAt(0);
  274. bookmark = range.cloneRange();
  275. } else {
  276. dojo.debug("No idea how to store the current selection for this browser!");
  277. }
  278. }
  279. return bookmark;
  280. }, moveToBookmark:function (bookmark) {
  281. var _document = dojo.doc();
  282. if (_document["selection"]) {
  283. var range = _document.selection.createRange();
  284. range.moveToBookmark(bookmark);
  285. range.select();
  286. } else {
  287. var selection;
  288. try {
  289. selection = dojo.global().getSelection();
  290. }
  291. catch (e) {
  292. }
  293. if (selection && selection["removeAllRanges"]) {
  294. selection.removeAllRanges();
  295. selection.addRange(bookmark);
  296. } else {
  297. dojo.debug("No idea how to restore selection for this browser!");
  298. }
  299. }
  300. }, collapse:function (beginning) {
  301. if (dojo.global()["getSelection"]) {
  302. var selection = dojo.global().getSelection();
  303. if (selection.removeAllRanges) {
  304. if (beginning) {
  305. selection.collapseToStart();
  306. } else {
  307. selection.collapseToEnd();
  308. }
  309. } else {
  310. dojo.global().getSelection().collapse(beginning);
  311. }
  312. } else {
  313. if (dojo.doc().selection) {
  314. var range = dojo.doc().selection.createRange();
  315. range.collapse(beginning);
  316. range.select();
  317. }
  318. }
  319. }, remove:function () {
  320. if (dojo.doc().selection) {
  321. var selection = dojo.doc().selection;
  322. if (selection.type.toUpperCase() != "NONE") {
  323. selection.clear();
  324. }
  325. return selection;
  326. } else {
  327. var selection = dojo.global().getSelection();
  328. for (var i = 0; i < selection.rangeCount; i++) {
  329. selection.getRangeAt(i).deleteContents();
  330. }
  331. return selection;
  332. }
  333. }});