cursorPos.js
5.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import Store from '../store';
function luckysheetRangeLast(obj) {
let range;
if(document.createRange){ //chrome, firefox, opera, safari, ie9+
if(obj.innerHTML != obj.innerText || obj.innerHTML == ""){
obj.focus(); //解决ff不获取焦点无法定位问题
range = window.getSelection();//创建range
range.selectAllChildren(obj);//range 选择obj下所有子内容
range.collapseToEnd();//光标移至最后
}
else{
let len = obj.innerText.length;
range = document.createRange();
range.selectNodeContents(obj);
range.setStart(obj.childNodes[0], len);
range.collapse(true);
let selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
}
else if(document.selection){ //ie8 and lower
range = document.body.createTextRange();
range.moveToElementText(obj);
range.collapse(false);
range.select();
}
}
function getCursortPosition(textDom){
let cursorPos = 0;
if(document.selection){
textDom.focus();
let selectRange = document.selection.createRange();
selectRange.moveStart("character", -textDom.value.length);
cursorPos = selectRange.text.length;
}
else if(textDom.selectionStart || textDom.selectionStart == "0"){
cursorPos = textDom.selectionStart;
}
return cursorPos;
}
function hideMenuByCancel(event){
// Right-click the menu in the title bar, and click on the elements whose class is luckysheet-cols-rows-shift-left and luckysheet-cols-rows-shift-right will trigger the hiding of the menu bar. It should be prohibited. Exclude these two elements. There may be more Other elements will also jump here for more testing
if(event.target.classList && (event.target.classList.contains('luckysheet-cols-rows-shift-left') || event.target.classList.contains('luckysheet-cols-rows-shift-right'))){
return;
}
if (!$(event.target).hasClass("luckysheet-mousedown-cancel") && $(event.target).filter("[class*='sp-palette']").length == 0 && $(event.target).filter("[class*='sp-thumb']").length == 0 && $(event.target).filter("[class*='sp-']").length == 0) {
$("#luckysheet-rightclick-menu").hide();
$("#luckysheet-cols-h-hover").hide();
$("#luckysheet-cols-menu-btn").hide();
// $("#luckysheet-rightclick-menu").hide();
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu, #luckysheet-user-menu").hide();
$("body > .luckysheet-filter-menu, body > .luckysheet-filter-submenu, body > .luckysheet-cols-menu").hide();
//$("body > luckysheet-menuButton").hide();
Store.luckysheet_cols_menu_status = false;
}
}
function selectTextDom(ele){
if (window.getSelection) {
let range = document.createRange();
range.selectNodeContents(ele);
if(range.startContainer && isInPage(range.startContainer)){
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
}
else if (document.selection) {
let range = document.body.createTextRange();
range.moveToElementText(ele);
range.select();
}
}
function selectTextContent(ele){
if (window.getSelection) {
let range = document.createRange();
var content=ele.firstChild;
range.setStart(content,0);
range.setEnd(content,content.length);
if(range.startContainer && isInPage(range.startContainer)){
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
}
else if (document.selection) {
let range = document.body.createTextRange();
range.moveToElementText(ele);
range.select();
}
}
function selectTextContentCross(sEle, eEle){
if (window.getSelection) {
let range = document.createRange();
var sContent=sEle.firstChild, eContent=eEle.firstChild;
range.setStart(sContent,0);
range.setEnd(eContent,eContent.length);
if(range.startContainer && isInPage(range.startContainer)){
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
}
}
function selectTextContentCollapse(sEle, index){
if (window.getSelection) {
let range = document.createRange();
var sContent=sEle.firstChild;
if(index>sContent.length){
index=sContent.length;
}
else if(index<0){
index = 0;
}
range.setStart(sContent,index);
range.collapse(true);
if(range.startContainer && isInPage(range.startContainer)){
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
}
}
function isInPage(node) {
return (node === document.body) ? false : document.body.contains(node);
}
export {
luckysheetRangeLast,
getCursortPosition,
hideMenuByCancel,
selectTextContent,
selectTextDom,
selectTextContentCross,
selectTextContentCollapse
}