searchreplace.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. ///import core
  2. ///commands 查找替换
  3. ///commandsName SearchReplace
  4. ///commandsTitle 查询替换
  5. ///commandsDialog dialogs\searchreplace
  6. /**
  7. * @description 查找替换
  8. * @author zhanyi
  9. */
  10. UE.plugins['searchreplace'] = function(){
  11. var currentRange,
  12. first,
  13. me = this;
  14. me.addListener('reset',function(){
  15. currentRange = null;
  16. first = null;
  17. });
  18. me.commands['searchreplace'] = {
  19. execCommand : function(cmdName,opt){
  20. var me = this,
  21. sel = me.selection,
  22. range,
  23. nativeRange,
  24. num = 0,
  25. opt = utils.extend(opt,{
  26. all : false,
  27. casesensitive : false,
  28. dir : 1
  29. },true);
  30. if(browser.ie){
  31. while(1){
  32. var tmpRange;
  33. nativeRange = me.document.selection.createRange();
  34. tmpRange = nativeRange.duplicate();
  35. tmpRange.moveToElementText(me.document.body);
  36. if(opt.all){
  37. first = 0;
  38. opt.dir = 1;
  39. if(currentRange){
  40. tmpRange.setEndPoint(opt.dir == -1 ? 'EndToStart' : 'StartToEnd',currentRange);
  41. }
  42. tmpRange.moveToElementText(me.document.body);
  43. }else{
  44. tmpRange.setEndPoint(opt.dir == -1 ? 'EndToStart' : 'StartToEnd',nativeRange);
  45. if(opt.hasOwnProperty("replaceStr")){
  46. tmpRange.setEndPoint(opt.dir == -1 ? 'StartToEnd' : 'EndToStart',nativeRange);
  47. }
  48. }
  49. nativeRange = tmpRange.duplicate();
  50. if(!tmpRange.findText(opt.searchStr,opt.dir,opt.casesensitive ? 4 : 0)){
  51. currentRange = null;
  52. tmpRange = me.document.selection.createRange();
  53. tmpRange.scrollIntoView();
  54. return num;
  55. }
  56. tmpRange.select();
  57. //替换
  58. if(opt.hasOwnProperty("replaceStr")){
  59. range = sel.getRange();
  60. range.deleteContents().insertNode(range.document.createTextNode(opt.replaceStr)).select();
  61. currentRange = sel.getNative().createRange();
  62. }
  63. num++;
  64. if(!opt.all){
  65. break;
  66. }
  67. }
  68. }else{
  69. var w = me.window,nativeSel = sel.getNative(),tmpRange;
  70. while(1){
  71. if(opt.all){
  72. if(currentRange){
  73. currentRange.collapse(false);
  74. nativeRange = currentRange;
  75. }else{
  76. nativeRange = me.document.createRange();
  77. }
  78. nativeRange.setStart(me.document.body,0);
  79. nativeRange.collapse(true);
  80. nativeSel.removeAllRanges();
  81. nativeSel.addRange( nativeRange );
  82. first = 0;
  83. opt.dir = 1;
  84. }else{
  85. //safari弹出层,原生已经找不到range了,所以需要先选回来,再取原生
  86. if(browser.safari){
  87. me.selection.getRange().select();
  88. }
  89. nativeRange = w.getSelection().getRangeAt(0);
  90. if(opt.hasOwnProperty("replaceStr")){
  91. nativeRange.collapse(opt.dir == 1 ? true : false);
  92. }
  93. }
  94. //如果是第一次并且海选中了内容那就要清除,为find做准备
  95. if(!first){
  96. nativeRange.collapse( opt.dir <0 ? true : false);
  97. nativeSel.removeAllRanges();
  98. nativeSel.addRange( nativeRange );
  99. }else{
  100. nativeSel.removeAllRanges();
  101. }
  102. if(!w.find(opt.searchStr,opt.casesensitive,opt.dir < 0 ? true : false) ) {
  103. currentRange = null;
  104. nativeSel.removeAllRanges();
  105. return num;
  106. }
  107. first = 0;
  108. range = w.getSelection().getRangeAt(0);
  109. if(!range.collapsed){
  110. if(opt.hasOwnProperty("replaceStr")){
  111. range.deleteContents();
  112. var text = w.document.createTextNode(opt.replaceStr);
  113. range.insertNode(text);
  114. range.selectNode(text);
  115. nativeSel.addRange(range);
  116. currentRange = range.cloneRange();
  117. }
  118. }
  119. num++;
  120. if(!opt.all){
  121. break;
  122. }
  123. }
  124. }
  125. return true;
  126. }
  127. };
  128. };