searchreplace.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. ///import core
  2. ///commands 查找替换
  3. ///commandsName SearchReplace
  4. ///commandsTitle 查询替换
  5. ///commandsDialog dialogs\searchreplace\searchreplace.html
  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. }else{
  43. tmpRange.setEndPoint(opt.dir == -1 ? 'EndToStart' : 'StartToEnd',nativeRange);
  44. if(opt.hasOwnProperty("replaceStr")){
  45. tmpRange.setEndPoint(opt.dir == -1 ? 'StartToEnd' : 'EndToStart',nativeRange);
  46. }
  47. }
  48. nativeRange = tmpRange.duplicate();
  49. if(!tmpRange.findText(opt.searchStr,opt.dir,opt.casesensitive ? 4 : 0)){
  50. currentRange = null;
  51. tmpRange = me.document.selection.createRange();
  52. tmpRange.scrollIntoView();
  53. return num;
  54. }
  55. tmpRange.select();
  56. //替换
  57. if(opt.hasOwnProperty("replaceStr")){
  58. range = sel.getRange();
  59. range.deleteContents().insertNode(range.document.createTextNode(opt.replaceStr)).select();
  60. currentRange = sel.getNative().createRange();
  61. }
  62. num++;
  63. if(!opt.all)break;
  64. }
  65. }else{
  66. var w = me.window,nativeSel = sel.getNative(),tmpRange;
  67. while(1){
  68. if(opt.all){
  69. if(currentRange){
  70. currentRange.collapse(false);
  71. nativeRange = currentRange;
  72. }else{
  73. nativeRange = me.document.createRange();
  74. nativeRange.setStart(me.document.body,0);
  75. }
  76. nativeSel.removeAllRanges();
  77. nativeSel.addRange( nativeRange );
  78. first = 0;
  79. opt.dir = 1;
  80. }else{
  81. nativeRange = w.getSelection().getRangeAt(0);
  82. if(opt.hasOwnProperty("replaceStr")){
  83. nativeRange.collapse(opt.dir == 1 ? true : false);
  84. }
  85. }
  86. //如果是第一次并且海选中了内容那就要清除,为find做准备
  87. if(!first){
  88. nativeRange.collapse( opt.dir <0 ? true : false);
  89. nativeSel.removeAllRanges();
  90. nativeSel.addRange( nativeRange );
  91. }else{
  92. nativeSel.removeAllRanges();
  93. }
  94. if(!w.find(opt.searchStr,opt.casesensitive,opt.dir < 0 ? true : false) ) {
  95. currentRange = null;
  96. nativeSel.removeAllRanges();
  97. return num;
  98. }
  99. first = 0;
  100. range = w.getSelection().getRangeAt(0);
  101. if(!range.collapsed){
  102. if(opt.hasOwnProperty("replaceStr")){
  103. range.deleteContents();
  104. var text = w.document.createTextNode(opt.replaceStr);
  105. range.insertNode(text);
  106. range.selectNode(text);
  107. nativeSel.addRange(range);
  108. currentRange = range.cloneRange();
  109. }
  110. }
  111. num++;
  112. if(!opt.all)break;
  113. }
  114. }
  115. return true;
  116. }
  117. }
  118. };