@whitesev/domutils 1.6.6 → 1.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -42
- package/dist/index.amd.js +266 -282
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +266 -282
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +266 -282
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +266 -282
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +266 -282
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +266 -282
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/DOMUtils.d.ts +5 -5
- package/dist/types/src/DOMUtilsCommonUtils.d.ts +2 -2
- package/dist/types/src/DOMUtilsEvent.d.ts +62 -62
- package/dist/types/src/types/DOMUtilsEvent.d.ts +142 -142
- package/dist/types/src/types/WindowApi.d.ts +9 -9
- package/dist/types/src/types/global.d.ts +2 -10
- package/dist/types/src/types/gm.d.ts +5 -1
- package/index.ts +3 -0
- package/package.json +19 -7
- package/src/DOMUtils.ts +1967 -2019
- package/src/DOMUtilsCommonUtils.ts +196 -196
- package/src/DOMUtilsData.ts +2 -2
- package/src/DOMUtilsEvent.ts +1407 -1459
- package/src/DOMUtilsOriginPrototype.ts +3 -3
- package/src/WindowApi.ts +55 -55
- package/src/types/DOMUtilsEvent.d.ts +142 -142
- package/src/types/WindowApi.d.ts +9 -9
- package/src/types/global.d.ts +2 -10
- package/src/types/gm.d.ts +5 -1
package/dist/index.umd.js
CHANGED
|
@@ -329,10 +329,8 @@
|
|
|
329
329
|
* 获取安全的html
|
|
330
330
|
*/
|
|
331
331
|
getSafeHTML(text) {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
// @ts-ignore
|
|
335
|
-
const policy = globalThis.trustedTypes.createPolicy("safe-innerHTML", {
|
|
332
|
+
if (window.trustedTypes) {
|
|
333
|
+
const policy = window.trustedTypes.createPolicy("safe-innerHTML", {
|
|
336
334
|
createHTML: (html) => html,
|
|
337
335
|
});
|
|
338
336
|
return policy.createHTML(text);
|
|
@@ -355,7 +353,7 @@
|
|
|
355
353
|
* @param element
|
|
356
354
|
*/
|
|
357
355
|
showElement(element) {
|
|
358
|
-
|
|
356
|
+
const dupNode = element.cloneNode(true);
|
|
359
357
|
dupNode.setAttribute("style", "visibility: hidden !important;display:block !important;");
|
|
360
358
|
this.windowApi.document.documentElement.appendChild(dupNode);
|
|
361
359
|
return {
|
|
@@ -386,7 +384,7 @@
|
|
|
386
384
|
}
|
|
387
385
|
styles = view.getComputedStyle(element);
|
|
388
386
|
}
|
|
389
|
-
|
|
387
|
+
const value = parseFloat(styles[styleName]);
|
|
390
388
|
if (isNaN(value)) {
|
|
391
389
|
return 0;
|
|
392
390
|
}
|
|
@@ -451,7 +449,7 @@
|
|
|
451
449
|
try {
|
|
452
450
|
return setTimeout$1(callback, timeout);
|
|
453
451
|
}
|
|
454
|
-
catch
|
|
452
|
+
catch {
|
|
455
453
|
return this.windowApi.setTimeout(callback, timeout);
|
|
456
454
|
}
|
|
457
455
|
},
|
|
@@ -464,7 +462,8 @@
|
|
|
464
462
|
clearTimeout$1(timeId);
|
|
465
463
|
}
|
|
466
464
|
}
|
|
467
|
-
catch
|
|
465
|
+
catch {
|
|
466
|
+
// TODO
|
|
468
467
|
}
|
|
469
468
|
finally {
|
|
470
469
|
this.windowApi.clearTimeout(timeId);
|
|
@@ -477,7 +476,7 @@
|
|
|
477
476
|
try {
|
|
478
477
|
return setInterval$1(callback, timeout);
|
|
479
478
|
}
|
|
480
|
-
catch
|
|
479
|
+
catch {
|
|
481
480
|
return this.windowApi.setInterval(callback, timeout);
|
|
482
481
|
}
|
|
483
482
|
},
|
|
@@ -490,7 +489,8 @@
|
|
|
490
489
|
clearInterval$1(timeId);
|
|
491
490
|
}
|
|
492
491
|
}
|
|
493
|
-
catch
|
|
492
|
+
catch {
|
|
493
|
+
// TODO
|
|
494
494
|
}
|
|
495
495
|
finally {
|
|
496
496
|
this.windowApi.clearInterval(timeId);
|
|
@@ -538,7 +538,7 @@
|
|
|
538
538
|
* @param option
|
|
539
539
|
*/
|
|
540
540
|
function getOption(args, startIndex, option) {
|
|
541
|
-
|
|
541
|
+
const currentParam = args[startIndex];
|
|
542
542
|
if (typeof currentParam === "boolean") {
|
|
543
543
|
option.capture = currentParam;
|
|
544
544
|
if (typeof args[startIndex + 1] === "boolean") {
|
|
@@ -560,8 +560,9 @@
|
|
|
560
560
|
}
|
|
561
561
|
return option;
|
|
562
562
|
}
|
|
563
|
-
|
|
564
|
-
|
|
563
|
+
const DOMUtilsContext = this;
|
|
564
|
+
// eslint-disable-next-line prefer-rest-params
|
|
565
|
+
const args = arguments;
|
|
565
566
|
if (typeof element === "string") {
|
|
566
567
|
element = DOMUtilsContext.selectorAll(element);
|
|
567
568
|
}
|
|
@@ -637,14 +638,14 @@
|
|
|
637
638
|
totalParent = DOMUtilsContext.windowApi.document.documentElement;
|
|
638
639
|
}
|
|
639
640
|
}
|
|
640
|
-
|
|
641
|
+
const findValue = selectorList.find((selectorItem) => {
|
|
641
642
|
// 判断目标元素是否匹配选择器
|
|
642
643
|
if (DOMUtilsContext.matches(eventTarget, selectorItem)) {
|
|
643
644
|
/* 当前目标可以被selector所匹配到 */
|
|
644
645
|
return true;
|
|
645
646
|
}
|
|
646
647
|
/* 在上层与主元素之间寻找可以被selector所匹配到的 */
|
|
647
|
-
|
|
648
|
+
const $closestMatches = DOMUtilsContext.closest(eventTarget, selectorItem);
|
|
648
649
|
if ($closestMatches && totalParent?.contains($closestMatches)) {
|
|
649
650
|
eventTarget = $closestMatches;
|
|
650
651
|
return true;
|
|
@@ -660,7 +661,9 @@
|
|
|
660
661
|
},
|
|
661
662
|
});
|
|
662
663
|
}
|
|
663
|
-
catch
|
|
664
|
+
catch {
|
|
665
|
+
// TODO
|
|
666
|
+
}
|
|
664
667
|
listenerCallBack.call(eventTarget, event, eventTarget);
|
|
665
668
|
checkOptionOnceToRemoveEventListener();
|
|
666
669
|
}
|
|
@@ -675,7 +678,7 @@
|
|
|
675
678
|
eventTypeList.forEach((eventName) => {
|
|
676
679
|
elementItem.addEventListener(eventName, domUtilsEventCallBack, listenerOption);
|
|
677
680
|
/* 获取对象上的事件 */
|
|
678
|
-
|
|
681
|
+
const elementEvents = Reflect.get(elementItem, DOMUtilsData.SymbolEvents) || {};
|
|
679
682
|
/* 初始化对象上的xx事件 */
|
|
680
683
|
elementEvents[eventName] = elementEvents[eventName] || [];
|
|
681
684
|
elementEvents[eventName].push({
|
|
@@ -697,7 +700,7 @@
|
|
|
697
700
|
* @param option
|
|
698
701
|
*/
|
|
699
702
|
function getOption(args1, startIndex, option) {
|
|
700
|
-
|
|
703
|
+
const currentParam = args1[startIndex];
|
|
701
704
|
if (typeof currentParam === "boolean") {
|
|
702
705
|
option.capture = currentParam;
|
|
703
706
|
}
|
|
@@ -706,8 +709,9 @@
|
|
|
706
709
|
}
|
|
707
710
|
return option;
|
|
708
711
|
}
|
|
709
|
-
|
|
710
|
-
|
|
712
|
+
const DOMUtilsContext = this;
|
|
713
|
+
// eslint-disable-next-line prefer-rest-params
|
|
714
|
+
const args = arguments;
|
|
711
715
|
if (typeof element === "string") {
|
|
712
716
|
element = DOMUtilsContext.selectorAll(element);
|
|
713
717
|
}
|
|
@@ -769,14 +773,14 @@
|
|
|
769
773
|
}
|
|
770
774
|
elementList.forEach((elementItem) => {
|
|
771
775
|
/* 获取对象上的事件 */
|
|
772
|
-
|
|
776
|
+
const elementEvents = Reflect.get(elementItem, DOMUtilsData.SymbolEvents) || {};
|
|
773
777
|
eventTypeList.forEach((eventName) => {
|
|
774
778
|
let handlers = elementEvents[eventName] || [];
|
|
775
779
|
if (typeof filter === "function") {
|
|
776
780
|
handlers = handlers.filter(filter);
|
|
777
781
|
}
|
|
778
782
|
for (let index = 0; index < handlers.length; index++) {
|
|
779
|
-
|
|
783
|
+
const handler = handlers[index];
|
|
780
784
|
let flag = true;
|
|
781
785
|
if (flag && listenerCallBack && handler.originCallBack !== listenerCallBack) {
|
|
782
786
|
// callback不同
|
|
@@ -811,7 +815,7 @@
|
|
|
811
815
|
* @param eventType (可选)需要取消监听的事件
|
|
812
816
|
*/
|
|
813
817
|
offAll(element, eventType) {
|
|
814
|
-
|
|
818
|
+
const DOMUtilsContext = this;
|
|
815
819
|
if (typeof element === "string") {
|
|
816
820
|
element = DOMUtilsContext.selectorAll(element);
|
|
817
821
|
}
|
|
@@ -837,10 +841,10 @@
|
|
|
837
841
|
if (!symbolEvents.toString().startsWith("Symbol(events_")) {
|
|
838
842
|
return;
|
|
839
843
|
}
|
|
840
|
-
|
|
841
|
-
|
|
844
|
+
const elementEvents = elementItem[symbolEvents] || {};
|
|
845
|
+
const iterEventNameList = eventTypeList.length ? eventTypeList : Object.keys(elementEvents);
|
|
842
846
|
iterEventNameList.forEach((eventName) => {
|
|
843
|
-
|
|
847
|
+
const handlers = elementEvents[eventName];
|
|
844
848
|
if (!handlers) {
|
|
845
849
|
return;
|
|
846
850
|
}
|
|
@@ -849,7 +853,7 @@
|
|
|
849
853
|
capture: handler["option"]["capture"],
|
|
850
854
|
});
|
|
851
855
|
}
|
|
852
|
-
|
|
856
|
+
const events = Reflect.get(elementItem, symbolEvents);
|
|
853
857
|
DOMUtilsCommonUtils.delete(events, eventName);
|
|
854
858
|
});
|
|
855
859
|
});
|
|
@@ -867,7 +871,7 @@
|
|
|
867
871
|
if (typeof callback !== "function") {
|
|
868
872
|
return;
|
|
869
873
|
}
|
|
870
|
-
|
|
874
|
+
const DOMUtilsContext = this;
|
|
871
875
|
/**
|
|
872
876
|
* 检测文档是否加载完毕
|
|
873
877
|
*/
|
|
@@ -882,7 +886,7 @@
|
|
|
882
886
|
return false;
|
|
883
887
|
}
|
|
884
888
|
}
|
|
885
|
-
catch
|
|
889
|
+
catch {
|
|
886
890
|
return false;
|
|
887
891
|
}
|
|
888
892
|
}
|
|
@@ -893,7 +897,7 @@
|
|
|
893
897
|
removeDomReadyListener();
|
|
894
898
|
callback();
|
|
895
899
|
}
|
|
896
|
-
|
|
900
|
+
const targetList = [
|
|
897
901
|
{
|
|
898
902
|
target: DOMUtilsContext.windowApi.document,
|
|
899
903
|
eventType: "DOMContentLoaded",
|
|
@@ -910,7 +914,7 @@
|
|
|
910
914
|
*/
|
|
911
915
|
function addDomReadyListener() {
|
|
912
916
|
for (let index = 0; index < targetList.length; index++) {
|
|
913
|
-
|
|
917
|
+
const item = targetList[index];
|
|
914
918
|
item.target.addEventListener(item.eventType, item.callback);
|
|
915
919
|
}
|
|
916
920
|
}
|
|
@@ -919,7 +923,7 @@
|
|
|
919
923
|
*/
|
|
920
924
|
function removeDomReadyListener() {
|
|
921
925
|
for (let index = 0; index < targetList.length; index++) {
|
|
922
|
-
|
|
926
|
+
const item = targetList[index];
|
|
923
927
|
item.target.removeEventListener(item.eventType, item.callback);
|
|
924
928
|
}
|
|
925
929
|
}
|
|
@@ -947,7 +951,7 @@
|
|
|
947
951
|
* DOMUtils.trigger("a.xx",["click","tap","hover"])
|
|
948
952
|
*/
|
|
949
953
|
trigger(element, eventType, details, useDispatchToTriggerEvent = true) {
|
|
950
|
-
|
|
954
|
+
const DOMUtilsContext = this;
|
|
951
955
|
if (typeof element === "string") {
|
|
952
956
|
element = DOMUtilsContext.selectorAll(element);
|
|
953
957
|
}
|
|
@@ -971,7 +975,7 @@
|
|
|
971
975
|
}
|
|
972
976
|
elementList.forEach((elementItem) => {
|
|
973
977
|
/* 获取对象上的事件 */
|
|
974
|
-
|
|
978
|
+
const events = elementItem[DOMUtilsData.SymbolEvents] || {};
|
|
975
979
|
eventTypeList.forEach((_eventType_) => {
|
|
976
980
|
let event = null;
|
|
977
981
|
if (details && details instanceof Event) {
|
|
@@ -1011,7 +1015,7 @@
|
|
|
1011
1015
|
* })
|
|
1012
1016
|
* */
|
|
1013
1017
|
click(element, handler, details, useDispatchToTriggerEvent) {
|
|
1014
|
-
|
|
1018
|
+
const DOMUtilsContext = this;
|
|
1015
1019
|
if (typeof element === "string") {
|
|
1016
1020
|
element = DOMUtilsContext.selectorAll(element);
|
|
1017
1021
|
}
|
|
@@ -1047,7 +1051,7 @@
|
|
|
1047
1051
|
* })
|
|
1048
1052
|
* */
|
|
1049
1053
|
blur(element, handler, details, useDispatchToTriggerEvent) {
|
|
1050
|
-
|
|
1054
|
+
const DOMUtilsContext = this;
|
|
1051
1055
|
if (typeof element === "string") {
|
|
1052
1056
|
element = DOMUtilsContext.selectorAll(element);
|
|
1053
1057
|
}
|
|
@@ -1083,7 +1087,7 @@
|
|
|
1083
1087
|
* })
|
|
1084
1088
|
* */
|
|
1085
1089
|
focus(element, handler, details, useDispatchToTriggerEvent) {
|
|
1086
|
-
|
|
1090
|
+
const DOMUtilsContext = this;
|
|
1087
1091
|
if (typeof element === "string") {
|
|
1088
1092
|
element = DOMUtilsContext.selectorAll(element);
|
|
1089
1093
|
}
|
|
@@ -1119,7 +1123,7 @@
|
|
|
1119
1123
|
* })
|
|
1120
1124
|
*/
|
|
1121
1125
|
hover(element, handler, option) {
|
|
1122
|
-
|
|
1126
|
+
const DOMUtilsContext = this;
|
|
1123
1127
|
if (typeof element === "string") {
|
|
1124
1128
|
element = DOMUtilsContext.selectorAll(element);
|
|
1125
1129
|
}
|
|
@@ -1143,7 +1147,7 @@
|
|
|
1143
1147
|
* @param option 配置项,这里默认配置once为true
|
|
1144
1148
|
*/
|
|
1145
1149
|
animationend(element, handler, option) {
|
|
1146
|
-
|
|
1150
|
+
const DOMUtilsContext = this;
|
|
1147
1151
|
if (typeof element === "string") {
|
|
1148
1152
|
element = DOMUtilsContext.selector(element);
|
|
1149
1153
|
}
|
|
@@ -1178,7 +1182,7 @@
|
|
|
1178
1182
|
* @param option 配置项,这里默认配置once为true
|
|
1179
1183
|
*/
|
|
1180
1184
|
transitionend(element, handler, option) {
|
|
1181
|
-
|
|
1185
|
+
const DOMUtilsContext = this;
|
|
1182
1186
|
if (typeof element === "string") {
|
|
1183
1187
|
element = DOMUtilsContext.selector(element);
|
|
1184
1188
|
}
|
|
@@ -1222,7 +1226,7 @@
|
|
|
1222
1226
|
* })
|
|
1223
1227
|
*/
|
|
1224
1228
|
keyup(element, handler, option) {
|
|
1225
|
-
|
|
1229
|
+
const DOMUtilsContext = this;
|
|
1226
1230
|
if (element == null) {
|
|
1227
1231
|
return;
|
|
1228
1232
|
}
|
|
@@ -1254,7 +1258,7 @@
|
|
|
1254
1258
|
* })
|
|
1255
1259
|
*/
|
|
1256
1260
|
keydown(element, handler, option) {
|
|
1257
|
-
|
|
1261
|
+
const DOMUtilsContext = this;
|
|
1258
1262
|
if (element == null) {
|
|
1259
1263
|
return;
|
|
1260
1264
|
}
|
|
@@ -1286,7 +1290,7 @@
|
|
|
1286
1290
|
* })
|
|
1287
1291
|
*/
|
|
1288
1292
|
keypress(element, handler, option) {
|
|
1289
|
-
|
|
1293
|
+
const DOMUtilsContext = this;
|
|
1290
1294
|
if (element == null) {
|
|
1291
1295
|
return;
|
|
1292
1296
|
}
|
|
@@ -1303,80 +1307,80 @@
|
|
|
1303
1307
|
DOMUtilsContext.on(element, "keypress", null, handler, option);
|
|
1304
1308
|
}
|
|
1305
1309
|
/**
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1310
|
+
* 监听某个元素键盘按键事件或window全局按键事件
|
|
1311
|
+
* 按下有值的键时触发,按下Ctrl\Alt\Shift\Meta是无值键。按下先触发keydown事件,再触发keypress事件。
|
|
1312
|
+
* @param element 需要监听的对象,可以是全局Window或者某个元素
|
|
1313
|
+
* @param eventName 事件名,默认keypress
|
|
1314
|
+
* @param callback 自己定义的回调事件,参数1为当前的key,参数2为组合按键,数组类型,包含ctrl、shift、alt和meta(win键或mac的cmd键)
|
|
1315
|
+
* @param options 监听事件的配置
|
|
1316
|
+
* @example
|
|
1317
|
+
Utils.listenKeyboard(window,(keyName,keyValue,otherKey,event)=>{
|
|
1318
|
+
if(keyName === "Enter"){
|
|
1319
|
+
console.log("回车按键的值是:"+keyValue)
|
|
1320
|
+
}
|
|
1321
|
+
if(otherKey.indexOf("ctrl") && keyName === "Enter" ){
|
|
1322
|
+
console.log("Ctrl和回车键");
|
|
1323
|
+
}
|
|
1324
|
+
})
|
|
1325
|
+
* @example
|
|
1326
|
+
字母和数字键的键码值(keyCode)
|
|
1327
|
+
按键 键码 按键 键码 按键 键码 按键 键码
|
|
1328
|
+
A 65 J 74 S 83 1 49
|
|
1329
|
+
B 66 K 75 T 84 2 50
|
|
1330
|
+
C 67 L 76 U 85 3 51
|
|
1331
|
+
D 68 M 77 V 86 4 52
|
|
1332
|
+
E 69 N 78 W 87 5 53
|
|
1333
|
+
F 70 O 79 X 88 6 54
|
|
1334
|
+
G 71 P 80 Y 89 7 55
|
|
1335
|
+
H 72 Q 81 Z 90 8 56
|
|
1336
|
+
I 73 R 82 0 48 9 57
|
|
1337
|
+
|
|
1338
|
+
数字键盘上的键的键码值(keyCode)
|
|
1339
|
+
功能键键码值(keyCode)
|
|
1340
|
+
按键 键码 按键 键码 按键 键码 按键 键码
|
|
1341
|
+
0 96 8 104 F1 112 F7 118
|
|
1342
|
+
1 97 9 105 F2 113 F8 119
|
|
1343
|
+
2 98 * 106 F3 114 F9 120
|
|
1344
|
+
3 99 + 107 F4 115 F10 121
|
|
1345
|
+
4 100 Enter 108 F5 116 F11 122
|
|
1346
|
+
5 101 - 109 F6 117 F12 123
|
|
1347
|
+
6 102 . 110
|
|
1348
|
+
7 103 / 111
|
|
1349
|
+
|
|
1350
|
+
控制键键码值(keyCode)
|
|
1351
|
+
按键 键码 按键 键码 按键 键码 按键 键码
|
|
1352
|
+
BackSpace 8 Esc 27 → 39 -_ 189
|
|
1353
|
+
Tab 9 Spacebar 32 ↓ 40 .> 190
|
|
1354
|
+
Clear 12 Page Up 33 Insert 45 /? 191
|
|
1355
|
+
Enter 13 Page Down 34 Delete 46 `~ 192
|
|
1356
|
+
Shift 16 End 35 Num Lock 144 [{ 219
|
|
1357
|
+
Control 17 Home 36 ;: 186 \| 220
|
|
1358
|
+
Alt 18 ← 37 =+ 187 ]} 221
|
|
1359
|
+
Cape Lock 20 ↑ 38 ,< 188 '" 222
|
|
1360
|
+
|
|
1361
|
+
多媒体键码值(keyCode)
|
|
1362
|
+
按键 键码
|
|
1363
|
+
音量加 175
|
|
1364
|
+
音量减 174
|
|
1365
|
+
停止 179
|
|
1366
|
+
静音 173
|
|
1367
|
+
浏览器 172
|
|
1368
|
+
邮件 180
|
|
1369
|
+
搜索 170
|
|
1370
|
+
收藏 171
|
|
1371
|
+
**/
|
|
1368
1372
|
listenKeyboard(element, eventName = "keypress", callback, options) {
|
|
1369
|
-
|
|
1373
|
+
const DOMUtilsContext = this;
|
|
1370
1374
|
if (typeof element === "string") {
|
|
1371
1375
|
element = DOMUtilsContext.selectorAll(element);
|
|
1372
1376
|
}
|
|
1373
|
-
|
|
1377
|
+
const keyboardEventCallBack = function (event) {
|
|
1374
1378
|
/** 键名 */
|
|
1375
|
-
|
|
1379
|
+
const keyName = event.key || event.code;
|
|
1376
1380
|
/** 键值 */
|
|
1377
|
-
|
|
1381
|
+
const keyValue = event.charCode || event.keyCode || event.which;
|
|
1378
1382
|
/** 组合键列表 */
|
|
1379
|
-
|
|
1383
|
+
const otherCodeList = [];
|
|
1380
1384
|
if (event.ctrlKey) {
|
|
1381
1385
|
otherCodeList.push("ctrl");
|
|
1382
1386
|
}
|
|
@@ -1414,29 +1418,27 @@
|
|
|
1414
1418
|
return $ele?.innerHTML?.trim() === "";
|
|
1415
1419
|
});
|
|
1416
1420
|
}
|
|
1417
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
1418
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
1421
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
1419
1422
|
// contains 语法
|
|
1420
|
-
|
|
1421
|
-
|
|
1423
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
1424
|
+
const text = textMatch[2];
|
|
1422
1425
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
1423
1426
|
return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
|
|
1424
1427
|
// @ts-ignore
|
|
1425
1428
|
return ($ele?.textContent || $ele?.innerText)?.includes(text);
|
|
1426
1429
|
});
|
|
1427
1430
|
}
|
|
1428
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
1429
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
1431
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
1430
1432
|
// regexp 语法
|
|
1431
|
-
|
|
1433
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
1432
1434
|
let pattern = textMatch[2];
|
|
1433
|
-
|
|
1435
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
1434
1436
|
let flags = "";
|
|
1435
1437
|
if (flagMatch) {
|
|
1436
1438
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
1437
1439
|
flags = flagMatch[3];
|
|
1438
1440
|
}
|
|
1439
|
-
|
|
1441
|
+
const regexp = new RegExp(pattern, flags);
|
|
1440
1442
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
1441
1443
|
return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
|
|
1442
1444
|
// @ts-ignore
|
|
@@ -1479,11 +1481,10 @@
|
|
|
1479
1481
|
selector = selector.replace(/:empty$/gi, "");
|
|
1480
1482
|
return $el.matches(selector) && $el?.innerHTML?.trim() === "";
|
|
1481
1483
|
}
|
|
1482
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
1483
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
1484
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
1484
1485
|
// contains 语法
|
|
1485
|
-
|
|
1486
|
-
|
|
1486
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
1487
|
+
const text = textMatch[2];
|
|
1487
1488
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
1488
1489
|
// @ts-ignore
|
|
1489
1490
|
let content = $el?.textContent || $el?.innerText;
|
|
@@ -1492,18 +1493,17 @@
|
|
|
1492
1493
|
}
|
|
1493
1494
|
return $el.matches(selector) && content?.includes(text);
|
|
1494
1495
|
}
|
|
1495
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
1496
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
1496
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
1497
1497
|
// regexp 语法
|
|
1498
|
-
|
|
1498
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
1499
1499
|
let pattern = textMatch[2];
|
|
1500
|
-
|
|
1500
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
1501
1501
|
let flags = "";
|
|
1502
1502
|
if (flagMatch) {
|
|
1503
1503
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
1504
1504
|
flags = flagMatch[3];
|
|
1505
1505
|
}
|
|
1506
|
-
|
|
1506
|
+
const regexp = new RegExp(pattern, flags);
|
|
1507
1507
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
1508
1508
|
// @ts-ignore
|
|
1509
1509
|
let content = $el?.textContent || $el?.innerText;
|
|
@@ -1522,45 +1522,43 @@
|
|
|
1522
1522
|
if (selector.match(/[^\s]{1}:empty$/gi)) {
|
|
1523
1523
|
// empty 语法
|
|
1524
1524
|
selector = selector.replace(/:empty$/gi, "");
|
|
1525
|
-
|
|
1525
|
+
const $closest = $el?.closest(selector);
|
|
1526
1526
|
if ($closest && $closest?.innerHTML?.trim() === "") {
|
|
1527
1527
|
return $closest;
|
|
1528
1528
|
}
|
|
1529
1529
|
return null;
|
|
1530
1530
|
}
|
|
1531
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
1532
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
1531
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
1533
1532
|
// contains 语法
|
|
1534
|
-
|
|
1535
|
-
|
|
1533
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
1534
|
+
const text = textMatch[2];
|
|
1536
1535
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
1537
|
-
|
|
1536
|
+
const $closest = $el?.closest(selector);
|
|
1538
1537
|
if ($closest) {
|
|
1539
1538
|
// @ts-ignore
|
|
1540
|
-
|
|
1539
|
+
const content = $el?.textContent || $el?.innerText;
|
|
1541
1540
|
if (typeof content === "string" && content.includes(text)) {
|
|
1542
1541
|
return $closest;
|
|
1543
1542
|
}
|
|
1544
1543
|
}
|
|
1545
1544
|
return null;
|
|
1546
1545
|
}
|
|
1547
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
1548
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
1546
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
1549
1547
|
// regexp 语法
|
|
1550
|
-
|
|
1548
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
1551
1549
|
let pattern = textMatch[2];
|
|
1552
|
-
|
|
1550
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
1553
1551
|
let flags = "";
|
|
1554
1552
|
if (flagMatch) {
|
|
1555
1553
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
1556
1554
|
flags = flagMatch[3];
|
|
1557
1555
|
}
|
|
1558
|
-
|
|
1556
|
+
const regexp = new RegExp(pattern, flags);
|
|
1559
1557
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
1560
|
-
|
|
1558
|
+
const $closest = $el?.closest(selector);
|
|
1561
1559
|
if ($closest) {
|
|
1562
1560
|
// @ts-ignore
|
|
1563
|
-
|
|
1561
|
+
const content = $el?.textContent || $el?.innerText;
|
|
1564
1562
|
if (typeof content === "string" && content.match(regexp)) {
|
|
1565
1563
|
return $closest;
|
|
1566
1564
|
}
|
|
@@ -1569,20 +1567,22 @@
|
|
|
1569
1567
|
}
|
|
1570
1568
|
else {
|
|
1571
1569
|
// 普通语法
|
|
1572
|
-
|
|
1570
|
+
const $closest = $el?.closest(selector);
|
|
1573
1571
|
return $closest;
|
|
1574
1572
|
}
|
|
1575
1573
|
}
|
|
1576
1574
|
}
|
|
1577
1575
|
|
|
1576
|
+
const version = "1.6.6";
|
|
1577
|
+
|
|
1578
1578
|
class DOMUtils extends DOMUtilsEvent {
|
|
1579
1579
|
constructor(option) {
|
|
1580
1580
|
super(option);
|
|
1581
1581
|
}
|
|
1582
1582
|
/** 版本号 */
|
|
1583
|
-
version =
|
|
1583
|
+
version = version;
|
|
1584
1584
|
attr(element, attrName, attrValue) {
|
|
1585
|
-
|
|
1585
|
+
const DOMUtilsContext = this;
|
|
1586
1586
|
if (typeof element === "string") {
|
|
1587
1587
|
element = DOMUtilsContext.selectorAll(element);
|
|
1588
1588
|
}
|
|
@@ -1616,8 +1616,8 @@
|
|
|
1616
1616
|
property,
|
|
1617
1617
|
/** 自定义属性 */
|
|
1618
1618
|
attributes) {
|
|
1619
|
-
|
|
1620
|
-
|
|
1619
|
+
const DOMUtilsContext = this;
|
|
1620
|
+
const tempElement = DOMUtilsContext.windowApi.document.createElement(tagName);
|
|
1621
1621
|
if (typeof property === "string") {
|
|
1622
1622
|
DOMUtilsContext.html(tempElement, property);
|
|
1623
1623
|
return tempElement;
|
|
@@ -1629,7 +1629,7 @@
|
|
|
1629
1629
|
attributes = {};
|
|
1630
1630
|
}
|
|
1631
1631
|
Object.keys(property).forEach((key) => {
|
|
1632
|
-
|
|
1632
|
+
const value = property[key];
|
|
1633
1633
|
if (key === "innerHTML") {
|
|
1634
1634
|
DOMUtilsContext.html(tempElement, value);
|
|
1635
1635
|
return;
|
|
@@ -1651,18 +1651,16 @@
|
|
|
1651
1651
|
return tempElement;
|
|
1652
1652
|
}
|
|
1653
1653
|
css(element, property, value) {
|
|
1654
|
-
|
|
1654
|
+
const DOMUtilsContext = this;
|
|
1655
1655
|
/**
|
|
1656
1656
|
* 把纯数字没有px的加上
|
|
1657
1657
|
*/
|
|
1658
1658
|
function handlePixe(propertyName, propertyValue) {
|
|
1659
|
-
|
|
1659
|
+
const allowAddPixe = ["width", "height", "top", "left", "right", "bottom", "font-size"];
|
|
1660
1660
|
if (typeof propertyValue === "number") {
|
|
1661
1661
|
propertyValue = propertyValue.toString();
|
|
1662
1662
|
}
|
|
1663
|
-
if (typeof propertyValue === "string" &&
|
|
1664
|
-
allowAddPixe.includes(propertyName) &&
|
|
1665
|
-
propertyValue.match(/[0-9]$/gi)) {
|
|
1663
|
+
if (typeof propertyValue === "string" && allowAddPixe.includes(propertyName) && propertyValue.match(/[0-9]$/gi)) {
|
|
1666
1664
|
propertyValue = propertyValue + "px";
|
|
1667
1665
|
}
|
|
1668
1666
|
return propertyValue;
|
|
@@ -1694,10 +1692,9 @@
|
|
|
1694
1692
|
});
|
|
1695
1693
|
return;
|
|
1696
1694
|
}
|
|
1697
|
-
else ;
|
|
1698
1695
|
return;
|
|
1699
1696
|
}
|
|
1700
|
-
|
|
1697
|
+
const setStyleProperty = (propertyName, propertyValue) => {
|
|
1701
1698
|
if (typeof propertyValue === "string" && propertyValue.trim().endsWith("!important")) {
|
|
1702
1699
|
propertyValue = propertyValue
|
|
1703
1700
|
.trim()
|
|
@@ -1719,8 +1716,8 @@
|
|
|
1719
1716
|
}
|
|
1720
1717
|
}
|
|
1721
1718
|
else if (typeof property === "object") {
|
|
1722
|
-
for (
|
|
1723
|
-
|
|
1719
|
+
for (const prop in property) {
|
|
1720
|
+
const value = property[prop];
|
|
1724
1721
|
setStyleProperty(prop, value);
|
|
1725
1722
|
}
|
|
1726
1723
|
}
|
|
@@ -1730,7 +1727,7 @@
|
|
|
1730
1727
|
}
|
|
1731
1728
|
}
|
|
1732
1729
|
text(element, text) {
|
|
1733
|
-
|
|
1730
|
+
const DOMUtilsContext = this;
|
|
1734
1731
|
if (typeof element === "string") {
|
|
1735
1732
|
element = DOMUtilsContext.selectorAll(element);
|
|
1736
1733
|
}
|
|
@@ -1766,7 +1763,7 @@
|
|
|
1766
1763
|
}
|
|
1767
1764
|
}
|
|
1768
1765
|
html(element, html) {
|
|
1769
|
-
|
|
1766
|
+
const DOMUtilsContext = this;
|
|
1770
1767
|
if (typeof element === "string") {
|
|
1771
1768
|
element = DOMUtilsContext.selectorAll(element);
|
|
1772
1769
|
}
|
|
@@ -1804,19 +1801,19 @@
|
|
|
1804
1801
|
* 获取移动元素的transform偏移
|
|
1805
1802
|
*/
|
|
1806
1803
|
getTransform(element, isShow = false) {
|
|
1807
|
-
|
|
1804
|
+
const DOMUtilsContext = this;
|
|
1808
1805
|
let transform_left = 0;
|
|
1809
1806
|
let transform_top = 0;
|
|
1810
1807
|
if (!(isShow || (!isShow && DOMUtilsCommonUtils.isShow(element)))) {
|
|
1811
1808
|
/* 未显示 */
|
|
1812
|
-
|
|
1813
|
-
|
|
1809
|
+
const { recovery } = DOMUtilsCommonUtils.showElement(element);
|
|
1810
|
+
const transformInfo = DOMUtilsContext.getTransform(element, true);
|
|
1814
1811
|
recovery();
|
|
1815
1812
|
return transformInfo;
|
|
1816
1813
|
}
|
|
1817
|
-
|
|
1814
|
+
const elementTransform = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element).transform;
|
|
1818
1815
|
if (elementTransform != null && elementTransform !== "none" && elementTransform !== "") {
|
|
1819
|
-
|
|
1816
|
+
const elementTransformSplit = elementTransform.match(/\((.+)\)/)?.[1].split(",");
|
|
1820
1817
|
if (elementTransformSplit) {
|
|
1821
1818
|
transform_left = Math.abs(parseInt(elementTransformSplit[4]));
|
|
1822
1819
|
transform_top = Math.abs(parseInt(elementTransformSplit[5]));
|
|
@@ -1832,7 +1829,7 @@
|
|
|
1832
1829
|
};
|
|
1833
1830
|
}
|
|
1834
1831
|
val(element, value) {
|
|
1835
|
-
|
|
1832
|
+
const DOMUtilsContext = this;
|
|
1836
1833
|
if (typeof element === "string") {
|
|
1837
1834
|
element = DOMUtilsContext.selectorAll(element);
|
|
1838
1835
|
}
|
|
@@ -1872,7 +1869,7 @@
|
|
|
1872
1869
|
}
|
|
1873
1870
|
}
|
|
1874
1871
|
prop(element, propName, propValue) {
|
|
1875
|
-
|
|
1872
|
+
const DOMUtilsContext = this;
|
|
1876
1873
|
if (typeof element === "string") {
|
|
1877
1874
|
element = DOMUtilsContext.selectorAll(element);
|
|
1878
1875
|
}
|
|
@@ -1914,7 +1911,7 @@
|
|
|
1914
1911
|
* DOMUtils.removeAttr("a.xx","data-value")
|
|
1915
1912
|
* */
|
|
1916
1913
|
removeAttr(element, attrName) {
|
|
1917
|
-
|
|
1914
|
+
const DOMUtilsContext = this;
|
|
1918
1915
|
if (typeof element === "string") {
|
|
1919
1916
|
element = DOMUtilsContext.selectorAll(element);
|
|
1920
1917
|
}
|
|
@@ -1940,7 +1937,7 @@
|
|
|
1940
1937
|
* DOMUtils.removeClass("a.xx","xx")
|
|
1941
1938
|
*/
|
|
1942
1939
|
removeClass(element, className) {
|
|
1943
|
-
|
|
1940
|
+
const DOMUtilsContext = this;
|
|
1944
1941
|
if (typeof element === "string") {
|
|
1945
1942
|
element = DOMUtilsContext.selectorAll(element);
|
|
1946
1943
|
}
|
|
@@ -1977,7 +1974,7 @@
|
|
|
1977
1974
|
* DOMUtils.removeProp("a.xx","href")
|
|
1978
1975
|
* */
|
|
1979
1976
|
removeProp(element, propName) {
|
|
1980
|
-
|
|
1977
|
+
const DOMUtilsContext = this;
|
|
1981
1978
|
if (typeof element === "string") {
|
|
1982
1979
|
element = DOMUtilsContext.selectorAll(element);
|
|
1983
1980
|
}
|
|
@@ -2003,7 +2000,7 @@
|
|
|
2003
2000
|
* DOMUtils.replaceWith("a.xx",'<b class="xx"></b>')
|
|
2004
2001
|
*/
|
|
2005
2002
|
replaceWith(element, newElement) {
|
|
2006
|
-
|
|
2003
|
+
const DOMUtilsContext = this;
|
|
2007
2004
|
if (typeof element === "string") {
|
|
2008
2005
|
element = DOMUtilsContext.selectorAll(element);
|
|
2009
2006
|
}
|
|
@@ -2020,7 +2017,7 @@
|
|
|
2020
2017
|
if (typeof newElement === "string") {
|
|
2021
2018
|
newElement = DOMUtilsContext.parseHTML(newElement, false, false);
|
|
2022
2019
|
}
|
|
2023
|
-
|
|
2020
|
+
const $parent = element.parentElement;
|
|
2024
2021
|
if ($parent) {
|
|
2025
2022
|
$parent.replaceChild(newElement, element);
|
|
2026
2023
|
}
|
|
@@ -2039,7 +2036,7 @@
|
|
|
2039
2036
|
* DOMUtils.addClass("a.xx","_vue_")
|
|
2040
2037
|
* */
|
|
2041
2038
|
addClass(element, className) {
|
|
2042
|
-
|
|
2039
|
+
const DOMUtilsContext = this;
|
|
2043
2040
|
if (typeof element === "string") {
|
|
2044
2041
|
element = DOMUtilsContext.selectorAll(element);
|
|
2045
2042
|
}
|
|
@@ -2069,7 +2066,7 @@
|
|
|
2069
2066
|
* @param className
|
|
2070
2067
|
*/
|
|
2071
2068
|
hasClass(element, className) {
|
|
2072
|
-
|
|
2069
|
+
const DOMUtilsContext = this;
|
|
2073
2070
|
if (typeof element === "string") {
|
|
2074
2071
|
element = DOMUtilsContext.selectorAll(element);
|
|
2075
2072
|
}
|
|
@@ -2108,7 +2105,7 @@
|
|
|
2108
2105
|
* DOMUtils.append("a.xx","'<b class="xx"></b>")
|
|
2109
2106
|
* */
|
|
2110
2107
|
append(element, content) {
|
|
2111
|
-
|
|
2108
|
+
const DOMUtilsContext = this;
|
|
2112
2109
|
if (typeof element === "string") {
|
|
2113
2110
|
element = DOMUtilsContext.selectorAll(element);
|
|
2114
2111
|
}
|
|
@@ -2140,7 +2137,7 @@
|
|
|
2140
2137
|
}
|
|
2141
2138
|
if (Array.isArray(content) || content instanceof NodeList) {
|
|
2142
2139
|
/* 数组 */
|
|
2143
|
-
|
|
2140
|
+
const fragment = DOMUtilsContext.windowApi.document.createDocumentFragment();
|
|
2144
2141
|
content.forEach((ele) => {
|
|
2145
2142
|
if (typeof ele === "string") {
|
|
2146
2143
|
// 转为元素
|
|
@@ -2164,7 +2161,7 @@
|
|
|
2164
2161
|
* DOMUtils.prepend("a.xx","'<b class="xx"></b>")
|
|
2165
2162
|
* */
|
|
2166
2163
|
prepend(element, content) {
|
|
2167
|
-
|
|
2164
|
+
const DOMUtilsContext = this;
|
|
2168
2165
|
if (typeof element === "string") {
|
|
2169
2166
|
element = DOMUtilsContext.selectorAll(element);
|
|
2170
2167
|
}
|
|
@@ -2188,7 +2185,7 @@
|
|
|
2188
2185
|
}
|
|
2189
2186
|
}
|
|
2190
2187
|
else {
|
|
2191
|
-
|
|
2188
|
+
const $firstChild = element.firstChild;
|
|
2192
2189
|
if ($firstChild == null) {
|
|
2193
2190
|
element.prepend(content);
|
|
2194
2191
|
}
|
|
@@ -2207,7 +2204,7 @@
|
|
|
2207
2204
|
* DOMUtils.after("a.xx","'<b class="xx"></b>")
|
|
2208
2205
|
* */
|
|
2209
2206
|
after(element, content) {
|
|
2210
|
-
|
|
2207
|
+
const DOMUtilsContext = this;
|
|
2211
2208
|
if (typeof element === "string") {
|
|
2212
2209
|
element = DOMUtilsContext.selectorAll(element);
|
|
2213
2210
|
}
|
|
@@ -2225,8 +2222,8 @@
|
|
|
2225
2222
|
element.insertAdjacentHTML("afterend", DOMUtilsCommonUtils.getSafeHTML(content));
|
|
2226
2223
|
}
|
|
2227
2224
|
else {
|
|
2228
|
-
|
|
2229
|
-
|
|
2225
|
+
const $parent = element.parentElement;
|
|
2226
|
+
const $nextSlibling = element.nextSibling;
|
|
2230
2227
|
if (!$parent || $nextSlibling) {
|
|
2231
2228
|
// 任意一个不行
|
|
2232
2229
|
element.after(content);
|
|
@@ -2246,7 +2243,7 @@
|
|
|
2246
2243
|
* DOMUtils.before("a.xx","'<b class="xx"></b>")
|
|
2247
2244
|
* */
|
|
2248
2245
|
before(element, content) {
|
|
2249
|
-
|
|
2246
|
+
const DOMUtilsContext = this;
|
|
2250
2247
|
if (typeof element === "string") {
|
|
2251
2248
|
element = DOMUtilsContext.selectorAll(element);
|
|
2252
2249
|
}
|
|
@@ -2264,7 +2261,7 @@
|
|
|
2264
2261
|
element.insertAdjacentHTML("beforebegin", DOMUtilsCommonUtils.getSafeHTML(content));
|
|
2265
2262
|
}
|
|
2266
2263
|
else {
|
|
2267
|
-
|
|
2264
|
+
const $parent = element.parentElement;
|
|
2268
2265
|
if (!$parent) {
|
|
2269
2266
|
element.before(content);
|
|
2270
2267
|
}
|
|
@@ -2283,7 +2280,7 @@
|
|
|
2283
2280
|
* DOMUtils.remove("a.xx")
|
|
2284
2281
|
* */
|
|
2285
2282
|
remove(element) {
|
|
2286
|
-
|
|
2283
|
+
const DOMUtilsContext = this;
|
|
2287
2284
|
if (typeof element === "string") {
|
|
2288
2285
|
element = DOMUtilsContext.selectorAll(element);
|
|
2289
2286
|
}
|
|
@@ -2315,7 +2312,7 @@
|
|
|
2315
2312
|
* DOMUtils.empty("a.xx")
|
|
2316
2313
|
* */
|
|
2317
2314
|
empty(element) {
|
|
2318
|
-
|
|
2315
|
+
const DOMUtilsContext = this;
|
|
2319
2316
|
if (typeof element === "string") {
|
|
2320
2317
|
element = DOMUtilsContext.selectorAll(element);
|
|
2321
2318
|
}
|
|
@@ -2346,14 +2343,14 @@
|
|
|
2346
2343
|
* > 0
|
|
2347
2344
|
*/
|
|
2348
2345
|
offset(element) {
|
|
2349
|
-
|
|
2346
|
+
const DOMUtilsContext = this;
|
|
2350
2347
|
if (typeof element === "string") {
|
|
2351
2348
|
element = DOMUtilsContext.selector(element);
|
|
2352
2349
|
}
|
|
2353
2350
|
if (element == null) {
|
|
2354
2351
|
return;
|
|
2355
2352
|
}
|
|
2356
|
-
|
|
2353
|
+
const rect = element.getBoundingClientRect();
|
|
2357
2354
|
return {
|
|
2358
2355
|
/** y轴偏移 */
|
|
2359
2356
|
top: rect.top + DOMUtilsContext.windowApi.globalThis.scrollY,
|
|
@@ -2362,14 +2359,10 @@
|
|
|
2362
2359
|
};
|
|
2363
2360
|
}
|
|
2364
2361
|
width(element, isShow = false) {
|
|
2365
|
-
|
|
2362
|
+
const DOMUtilsContext = this;
|
|
2366
2363
|
if (typeof element === "string") {
|
|
2367
2364
|
element = DOMUtilsContext.selector(element);
|
|
2368
2365
|
}
|
|
2369
|
-
if (element == null) {
|
|
2370
|
-
// @ts-ignore
|
|
2371
|
-
return;
|
|
2372
|
-
}
|
|
2373
2366
|
if (DOMUtilsCommonUtils.isWin(element)) {
|
|
2374
2367
|
return DOMUtilsContext.windowApi.window.document.documentElement.clientWidth;
|
|
2375
2368
|
}
|
|
@@ -2388,11 +2381,11 @@
|
|
|
2388
2381
|
}
|
|
2389
2382
|
/* 如果从css里获取到的值不是大于0 可能是auto 则通过offsetWidth来进行计算 */
|
|
2390
2383
|
if (element.offsetWidth > 0) {
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
|
|
2384
|
+
const borderLeftWidth = DOMUtilsCommonUtils.getStyleValue(element, "borderLeftWidth");
|
|
2385
|
+
const borderRightWidth = DOMUtilsCommonUtils.getStyleValue(element, "borderRightWidth");
|
|
2386
|
+
const paddingLeft = DOMUtilsCommonUtils.getStyleValue(element, "paddingLeft");
|
|
2387
|
+
const paddingRight = DOMUtilsCommonUtils.getStyleValue(element, "paddingRight");
|
|
2388
|
+
const backHeight = parseFloat(element.offsetWidth.toString()) -
|
|
2396
2389
|
parseFloat(borderLeftWidth.toString()) -
|
|
2397
2390
|
parseFloat(borderRightWidth.toString()) -
|
|
2398
2391
|
parseFloat(paddingLeft.toString()) -
|
|
@@ -2404,24 +2397,20 @@
|
|
|
2404
2397
|
else {
|
|
2405
2398
|
/* 未显示 */
|
|
2406
2399
|
element = element;
|
|
2407
|
-
|
|
2408
|
-
|
|
2400
|
+
const { recovery } = DOMUtilsCommonUtils.showElement(element);
|
|
2401
|
+
const width = DOMUtilsContext.width(element, true);
|
|
2409
2402
|
recovery();
|
|
2410
2403
|
return width;
|
|
2411
2404
|
}
|
|
2412
2405
|
}
|
|
2413
2406
|
height(element, isShow = false) {
|
|
2414
|
-
|
|
2407
|
+
const DOMUtilsContext = this;
|
|
2415
2408
|
if (DOMUtilsCommonUtils.isWin(element)) {
|
|
2416
2409
|
return DOMUtilsContext.windowApi.window.document.documentElement.clientHeight;
|
|
2417
2410
|
}
|
|
2418
2411
|
if (typeof element === "string") {
|
|
2419
2412
|
element = DOMUtilsContext.selector(element);
|
|
2420
2413
|
}
|
|
2421
|
-
if (element == null) {
|
|
2422
|
-
// @ts-ignore
|
|
2423
|
-
return;
|
|
2424
|
-
}
|
|
2425
2414
|
if (element.nodeType === 9) {
|
|
2426
2415
|
element = element;
|
|
2427
2416
|
/* Document文档节点 */
|
|
@@ -2437,11 +2426,11 @@
|
|
|
2437
2426
|
}
|
|
2438
2427
|
/* 如果从css里获取到的值不是大于0 可能是auto 则通过offsetHeight来进行计算 */
|
|
2439
2428
|
if (element.offsetHeight > 0) {
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
|
|
2429
|
+
const borderTopWidth = DOMUtilsCommonUtils.getStyleValue(element, "borderTopWidth");
|
|
2430
|
+
const borderBottomWidth = DOMUtilsCommonUtils.getStyleValue(element, "borderBottomWidth");
|
|
2431
|
+
const paddingTop = DOMUtilsCommonUtils.getStyleValue(element, "paddingTop");
|
|
2432
|
+
const paddingBottom = DOMUtilsCommonUtils.getStyleValue(element, "paddingBottom");
|
|
2433
|
+
const backHeight = parseFloat(element.offsetHeight.toString()) -
|
|
2445
2434
|
parseFloat(borderTopWidth.toString()) -
|
|
2446
2435
|
parseFloat(borderBottomWidth.toString()) -
|
|
2447
2436
|
parseFloat(paddingTop.toString()) -
|
|
@@ -2453,60 +2442,52 @@
|
|
|
2453
2442
|
else {
|
|
2454
2443
|
/* 未显示 */
|
|
2455
2444
|
element = element;
|
|
2456
|
-
|
|
2457
|
-
|
|
2445
|
+
const { recovery } = DOMUtilsCommonUtils.showElement(element);
|
|
2446
|
+
const height = DOMUtilsContext.height(element, true);
|
|
2458
2447
|
recovery();
|
|
2459
2448
|
return height;
|
|
2460
2449
|
}
|
|
2461
2450
|
}
|
|
2462
2451
|
outerWidth(element, isShow = false) {
|
|
2463
|
-
|
|
2452
|
+
const DOMUtilsContext = this;
|
|
2464
2453
|
if (DOMUtilsCommonUtils.isWin(element)) {
|
|
2465
2454
|
return DOMUtilsContext.windowApi.window.innerWidth;
|
|
2466
2455
|
}
|
|
2467
2456
|
if (typeof element === "string") {
|
|
2468
2457
|
element = DOMUtilsContext.selector(element);
|
|
2469
2458
|
}
|
|
2470
|
-
if (element == null) {
|
|
2471
|
-
// @ts-ignore
|
|
2472
|
-
return;
|
|
2473
|
-
}
|
|
2474
2459
|
element = element;
|
|
2475
2460
|
if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2461
|
+
const style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element, null);
|
|
2462
|
+
const marginLeft = DOMUtilsCommonUtils.getStyleValue(style, "marginLeft");
|
|
2463
|
+
const marginRight = DOMUtilsCommonUtils.getStyleValue(style, "marginRight");
|
|
2479
2464
|
return element.offsetWidth + marginLeft + marginRight;
|
|
2480
2465
|
}
|
|
2481
2466
|
else {
|
|
2482
|
-
|
|
2483
|
-
|
|
2467
|
+
const { recovery } = DOMUtilsCommonUtils.showElement(element);
|
|
2468
|
+
const outerWidth = DOMUtilsContext.outerWidth(element, true);
|
|
2484
2469
|
recovery();
|
|
2485
2470
|
return outerWidth;
|
|
2486
2471
|
}
|
|
2487
2472
|
}
|
|
2488
2473
|
outerHeight(element, isShow = false) {
|
|
2489
|
-
|
|
2474
|
+
const DOMUtilsContext = this;
|
|
2490
2475
|
if (DOMUtilsCommonUtils.isWin(element)) {
|
|
2491
2476
|
return DOMUtilsContext.windowApi.window.innerHeight;
|
|
2492
2477
|
}
|
|
2493
2478
|
if (typeof element === "string") {
|
|
2494
2479
|
element = DOMUtilsContext.selector(element);
|
|
2495
2480
|
}
|
|
2496
|
-
if (element == null) {
|
|
2497
|
-
// @ts-ignore
|
|
2498
|
-
return;
|
|
2499
|
-
}
|
|
2500
2481
|
element = element;
|
|
2501
2482
|
if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2483
|
+
const style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element, null);
|
|
2484
|
+
const marginTop = DOMUtilsCommonUtils.getStyleValue(style, "marginTop");
|
|
2485
|
+
const marginBottom = DOMUtilsCommonUtils.getStyleValue(style, "marginBottom");
|
|
2505
2486
|
return element.offsetHeight + marginTop + marginBottom;
|
|
2506
2487
|
}
|
|
2507
2488
|
else {
|
|
2508
|
-
|
|
2509
|
-
|
|
2489
|
+
const { recovery } = DOMUtilsCommonUtils.showElement(element);
|
|
2490
|
+
const outerHeight = DOMUtilsContext.outerHeight(element, true);
|
|
2510
2491
|
recovery();
|
|
2511
2492
|
return outerHeight;
|
|
2512
2493
|
}
|
|
@@ -2524,7 +2505,7 @@
|
|
|
2524
2505
|
* })
|
|
2525
2506
|
*/
|
|
2526
2507
|
animate(element, styles, duration = 1000, callback = null) {
|
|
2527
|
-
|
|
2508
|
+
const DOMUtilsContext = this;
|
|
2528
2509
|
if (typeof element === "string") {
|
|
2529
2510
|
element = DOMUtilsContext.selectorAll(element);
|
|
2530
2511
|
}
|
|
@@ -2550,21 +2531,20 @@
|
|
|
2550
2531
|
if (Object.keys(styles).length === 0) {
|
|
2551
2532
|
throw new Error("styles must contain at least one property");
|
|
2552
2533
|
}
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
for (
|
|
2557
|
-
from[prop] =
|
|
2558
|
-
element.style[prop] || DOMUtilsContext.windowApi.globalThis.getComputedStyle(element)[prop];
|
|
2534
|
+
const start = performance.now();
|
|
2535
|
+
const from = {};
|
|
2536
|
+
const to = {};
|
|
2537
|
+
for (const prop in styles) {
|
|
2538
|
+
from[prop] = element.style[prop] || DOMUtilsContext.windowApi.globalThis.getComputedStyle(element)[prop];
|
|
2559
2539
|
to[prop] = styles[prop];
|
|
2560
2540
|
}
|
|
2561
|
-
|
|
2562
|
-
|
|
2541
|
+
const timer = DOMUtilsCommonUtils.setInterval(function () {
|
|
2542
|
+
const timePassed = performance.now() - start;
|
|
2563
2543
|
let progress = timePassed / duration;
|
|
2564
2544
|
if (progress > 1) {
|
|
2565
2545
|
progress = 1;
|
|
2566
2546
|
}
|
|
2567
|
-
for (
|
|
2547
|
+
for (const prop in styles) {
|
|
2568
2548
|
element.style[prop] = from[prop] + (to[prop] - from[prop]) * progress + "px";
|
|
2569
2549
|
}
|
|
2570
2550
|
if (progress === 1) {
|
|
@@ -2584,7 +2564,7 @@
|
|
|
2584
2564
|
* DOMUtils.wrap(document.querySelector("a.xx"),"<div></div>")
|
|
2585
2565
|
*/
|
|
2586
2566
|
wrap(element, wrapperHTML) {
|
|
2587
|
-
|
|
2567
|
+
const DOMUtilsContext = this;
|
|
2588
2568
|
if (typeof element === "string") {
|
|
2589
2569
|
element = DOMUtilsContext.selectorAll(element);
|
|
2590
2570
|
}
|
|
@@ -2600,17 +2580,17 @@
|
|
|
2600
2580
|
}
|
|
2601
2581
|
element = element;
|
|
2602
2582
|
// 创建一个新的div元素,并将wrapperHTML作为其innerHTML
|
|
2603
|
-
|
|
2583
|
+
const wrapper = DOMUtilsContext.windowApi.document.createElement("div");
|
|
2604
2584
|
DOMUtilsContext.html(wrapper, wrapperHTML);
|
|
2605
|
-
|
|
2585
|
+
const wrapperFirstChild = wrapper.firstChild;
|
|
2606
2586
|
// 将要包裹的元素插入目标元素前面
|
|
2607
|
-
|
|
2587
|
+
const parentElement = element.parentElement;
|
|
2608
2588
|
parentElement.insertBefore(wrapperFirstChild, element);
|
|
2609
2589
|
// 将要包裹的元素移动到wrapper中
|
|
2610
2590
|
wrapperFirstChild.appendChild(element);
|
|
2611
2591
|
}
|
|
2612
2592
|
prev(element) {
|
|
2613
|
-
|
|
2593
|
+
const DOMUtilsContext = this;
|
|
2614
2594
|
if (typeof element === "string") {
|
|
2615
2595
|
element = DOMUtilsContext.selector(element);
|
|
2616
2596
|
}
|
|
@@ -2620,7 +2600,7 @@
|
|
|
2620
2600
|
return element.previousElementSibling;
|
|
2621
2601
|
}
|
|
2622
2602
|
next(element) {
|
|
2623
|
-
|
|
2603
|
+
const DOMUtilsContext = this;
|
|
2624
2604
|
if (typeof element === "string") {
|
|
2625
2605
|
element = DOMUtilsContext.selector(element);
|
|
2626
2606
|
}
|
|
@@ -2635,7 +2615,7 @@
|
|
|
2635
2615
|
* let DOMUtils = window.DOMUtils.noConflict()
|
|
2636
2616
|
*/
|
|
2637
2617
|
noConflict() {
|
|
2638
|
-
|
|
2618
|
+
const DOMUtilsContext = this;
|
|
2639
2619
|
if (DOMUtilsContext.windowApi.window.DOMUtils) {
|
|
2640
2620
|
DOMUtilsCommonUtils.delete(window, "DOMUtils");
|
|
2641
2621
|
}
|
|
@@ -2643,7 +2623,7 @@
|
|
|
2643
2623
|
return this;
|
|
2644
2624
|
}
|
|
2645
2625
|
siblings(element) {
|
|
2646
|
-
|
|
2626
|
+
const DOMUtilsContext = this;
|
|
2647
2627
|
if (typeof element === "string") {
|
|
2648
2628
|
element = DOMUtilsContext.selector(element);
|
|
2649
2629
|
}
|
|
@@ -2663,7 +2643,7 @@
|
|
|
2663
2643
|
* > <div ...>....</div>
|
|
2664
2644
|
*/
|
|
2665
2645
|
parent(element) {
|
|
2666
|
-
|
|
2646
|
+
const DOMUtilsContext = this;
|
|
2667
2647
|
if (typeof element === "string") {
|
|
2668
2648
|
element = DOMUtilsContext.selector(element);
|
|
2669
2649
|
}
|
|
@@ -2671,7 +2651,7 @@
|
|
|
2671
2651
|
return;
|
|
2672
2652
|
}
|
|
2673
2653
|
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
2674
|
-
|
|
2654
|
+
const resultArray = [];
|
|
2675
2655
|
element.forEach(($ele) => {
|
|
2676
2656
|
resultArray.push(DOMUtilsContext.parent($ele));
|
|
2677
2657
|
});
|
|
@@ -2682,11 +2662,11 @@
|
|
|
2682
2662
|
}
|
|
2683
2663
|
}
|
|
2684
2664
|
parseHTML(html, useParser = false, isComplete = false) {
|
|
2685
|
-
|
|
2665
|
+
const DOMUtilsContext = this;
|
|
2686
2666
|
// 去除html前后的空格
|
|
2687
2667
|
html = html.trim();
|
|
2688
2668
|
function parseHTMLByDOMParser() {
|
|
2689
|
-
|
|
2669
|
+
const parser = new DOMParser();
|
|
2690
2670
|
if (isComplete) {
|
|
2691
2671
|
return parser.parseFromString(html, "text/html");
|
|
2692
2672
|
}
|
|
@@ -2695,7 +2675,7 @@
|
|
|
2695
2675
|
}
|
|
2696
2676
|
}
|
|
2697
2677
|
function parseHTMLByCreateDom() {
|
|
2698
|
-
|
|
2678
|
+
const tempDIV = DOMUtilsContext.windowApi.document.createElement("div");
|
|
2699
2679
|
DOMUtilsContext.html(tempDIV, html);
|
|
2700
2680
|
if (isComplete) {
|
|
2701
2681
|
return tempDIV;
|
|
@@ -2720,7 +2700,7 @@
|
|
|
2720
2700
|
*/
|
|
2721
2701
|
serialize($form) {
|
|
2722
2702
|
const elements = $form.elements;
|
|
2723
|
-
|
|
2703
|
+
const serializedArray = [];
|
|
2724
2704
|
for (let i = 0; i < elements.length; i++) {
|
|
2725
2705
|
const element = elements[i];
|
|
2726
2706
|
if (element.name &&
|
|
@@ -2759,7 +2739,7 @@
|
|
|
2759
2739
|
* DOMUtils.show("a.xx")
|
|
2760
2740
|
*/
|
|
2761
2741
|
show(target, checkVisiblie = true) {
|
|
2762
|
-
|
|
2742
|
+
const DOMUtilsContext = this;
|
|
2763
2743
|
if (target == null) {
|
|
2764
2744
|
return;
|
|
2765
2745
|
}
|
|
@@ -2796,7 +2776,7 @@
|
|
|
2796
2776
|
* DOMUtils.hide("a.xx")
|
|
2797
2777
|
*/
|
|
2798
2778
|
hide(target, checkVisiblie = true) {
|
|
2799
|
-
|
|
2779
|
+
const DOMUtilsContext = this;
|
|
2800
2780
|
if (target == null) {
|
|
2801
2781
|
return;
|
|
2802
2782
|
}
|
|
@@ -2838,7 +2818,7 @@
|
|
|
2838
2818
|
if (element == null) {
|
|
2839
2819
|
return;
|
|
2840
2820
|
}
|
|
2841
|
-
|
|
2821
|
+
const DOMUtilsContext = this;
|
|
2842
2822
|
if (typeof element === "string") {
|
|
2843
2823
|
element = DOMUtilsContext.selectorAll(element);
|
|
2844
2824
|
}
|
|
@@ -2856,7 +2836,7 @@
|
|
|
2856
2836
|
function step(timestamp) {
|
|
2857
2837
|
if (!start)
|
|
2858
2838
|
start = timestamp;
|
|
2859
|
-
|
|
2839
|
+
const progress = timestamp - start;
|
|
2860
2840
|
element = element;
|
|
2861
2841
|
element.style.opacity = Math.min(progress / duration, 1).toString();
|
|
2862
2842
|
if (progress < duration) {
|
|
@@ -2886,7 +2866,7 @@
|
|
|
2886
2866
|
* })
|
|
2887
2867
|
*/
|
|
2888
2868
|
fadeOut(element, duration = 400, callback) {
|
|
2889
|
-
|
|
2869
|
+
const DOMUtilsContext = this;
|
|
2890
2870
|
if (element == null) {
|
|
2891
2871
|
return;
|
|
2892
2872
|
}
|
|
@@ -2906,7 +2886,7 @@
|
|
|
2906
2886
|
function step(timestamp) {
|
|
2907
2887
|
if (!start)
|
|
2908
2888
|
start = timestamp;
|
|
2909
|
-
|
|
2889
|
+
const progress = timestamp - start;
|
|
2910
2890
|
element = element;
|
|
2911
2891
|
element.style.opacity = Math.max(1 - progress / duration, 0).toString();
|
|
2912
2892
|
if (progress < duration) {
|
|
@@ -2932,7 +2912,7 @@
|
|
|
2932
2912
|
* DOMUtils.toggle("a.xx")
|
|
2933
2913
|
*/
|
|
2934
2914
|
toggle(element, checkVisiblie) {
|
|
2935
|
-
|
|
2915
|
+
const DOMUtilsContext = this;
|
|
2936
2916
|
if (typeof element === "string") {
|
|
2937
2917
|
element = DOMUtilsContext.selectorAll(element);
|
|
2938
2918
|
}
|
|
@@ -2970,7 +2950,7 @@
|
|
|
2970
2950
|
* DOMUtils.getTextBoundingRect(document.querySelector("input"));
|
|
2971
2951
|
*/
|
|
2972
2952
|
getTextBoundingRect($input, selectionStart, selectionEnd) {
|
|
2973
|
-
|
|
2953
|
+
const DOMUtilsContext = this;
|
|
2974
2954
|
// Basic parameter validation
|
|
2975
2955
|
if (!$input || !("value" in $input))
|
|
2976
2956
|
return $input;
|
|
@@ -2999,18 +2979,20 @@
|
|
|
2999
2979
|
else
|
|
3000
2980
|
selectionEnd = Math.min($input.value.length, selectionEnd);
|
|
3001
2981
|
// If available (thus IE), use the createTextRange method
|
|
3002
|
-
// @ts-ignore
|
|
3003
2982
|
if (typeof $input.createTextRange == "function") {
|
|
3004
|
-
|
|
2983
|
+
const range = $input.createTextRange();
|
|
3005
2984
|
range.collapse(true);
|
|
3006
2985
|
range.moveStart("character", selectionStart);
|
|
3007
2986
|
range.moveEnd("character", selectionEnd - selectionStart);
|
|
3008
2987
|
return range.getBoundingClientRect();
|
|
3009
2988
|
}
|
|
3010
2989
|
// createTextRange is not supported, create a fake text range
|
|
3011
|
-
|
|
2990
|
+
const offset = getInputOffset(), width = getInputCSS("width", true), height = getInputCSS("height", true);
|
|
2991
|
+
let topPos = offset.top;
|
|
2992
|
+
let leftPos = offset.left;
|
|
3012
2993
|
// Styles to simulate a node in an input field
|
|
3013
|
-
let cssDefaultStyles = "white-space:pre;padding:0;margin:0;"
|
|
2994
|
+
let cssDefaultStyles = "white-space:pre;padding:0;margin:0;";
|
|
2995
|
+
const listOfModifiers = [
|
|
3014
2996
|
"direction",
|
|
3015
2997
|
"font-family",
|
|
3016
2998
|
"font-size",
|
|
@@ -3032,16 +3014,15 @@
|
|
|
3032
3014
|
leftPos += getInputCSS("border-left-width", true);
|
|
3033
3015
|
leftPos += 1; //Seems to be necessary
|
|
3034
3016
|
for (let index = 0; index < listOfModifiers.length; index++) {
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
cssDefaultStyles += property + ":" + getInputCSS(property) + ";";
|
|
3017
|
+
const property = listOfModifiers[index];
|
|
3018
|
+
cssDefaultStyles += property + ":" + getInputCSS(property, false) + ";";
|
|
3038
3019
|
}
|
|
3039
3020
|
// End of CSS variable checks
|
|
3040
3021
|
// 不能为空,不然获取不到高度
|
|
3041
|
-
|
|
3022
|
+
const text = $input.value || "G", textLen = text.length, fakeClone = DOMUtilsContext.windowApi.document.createElement("div");
|
|
3042
3023
|
if (selectionStart > 0)
|
|
3043
3024
|
appendPart(0, selectionStart);
|
|
3044
|
-
|
|
3025
|
+
const fakeRange = appendPart(selectionStart, selectionEnd);
|
|
3045
3026
|
if (textLen > selectionEnd)
|
|
3046
3027
|
appendPart(selectionEnd, textLen);
|
|
3047
3028
|
// Styles to inherit the font styles of the element
|
|
@@ -3053,7 +3034,7 @@
|
|
|
3053
3034
|
fakeClone.style.width = width + "px";
|
|
3054
3035
|
fakeClone.style.height = height + "px";
|
|
3055
3036
|
DOMUtilsContext.windowApi.document.body.appendChild(fakeClone);
|
|
3056
|
-
|
|
3037
|
+
const returnValue = fakeRange.getBoundingClientRect(); //Get rect
|
|
3057
3038
|
fakeClone?.parentNode?.removeChild(fakeClone); //Remove temp
|
|
3058
3039
|
return returnValue;
|
|
3059
3040
|
// Local functions for readability of the previous code
|
|
@@ -3064,7 +3045,7 @@
|
|
|
3064
3045
|
* @returns
|
|
3065
3046
|
*/
|
|
3066
3047
|
function appendPart(start, end) {
|
|
3067
|
-
|
|
3048
|
+
const span = DOMUtilsContext.windowApi.document.createElement("span");
|
|
3068
3049
|
span.style.cssText = cssDefaultStyles; //Force styles to prevent unexpected results
|
|
3069
3050
|
span.textContent = text.substring(start, end);
|
|
3070
3051
|
fakeClone.appendChild(span);
|
|
@@ -3072,13 +3053,13 @@
|
|
|
3072
3053
|
}
|
|
3073
3054
|
// Computing offset position
|
|
3074
3055
|
function getInputOffset() {
|
|
3075
|
-
|
|
3056
|
+
const body = DOMUtilsContext.windowApi.document.body, win = DOMUtilsContext.windowApi.document.defaultView, docElem = DOMUtilsContext.windowApi.document.documentElement, $box = DOMUtilsContext.windowApi.document.createElement("div");
|
|
3076
3057
|
$box.style.paddingLeft = $box.style.width = "1px";
|
|
3077
3058
|
body.appendChild($box);
|
|
3078
|
-
|
|
3059
|
+
const isBoxModel = $box.offsetWidth == 2;
|
|
3079
3060
|
body.removeChild($box);
|
|
3080
|
-
|
|
3081
|
-
|
|
3061
|
+
const $boxRect = $input.getBoundingClientRect();
|
|
3062
|
+
const clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, scrollTop = win.pageYOffset || (isBoxModel && docElem.scrollTop) || body.scrollTop, scrollLeft = win.pageXOffset || (isBoxModel && docElem.scrollLeft) || body.scrollLeft;
|
|
3082
3063
|
return {
|
|
3083
3064
|
top: $boxRect.top + scrollTop - clientTop,
|
|
3084
3065
|
left: $boxRect.left + scrollLeft - clientLeft,
|
|
@@ -3091,10 +3072,13 @@
|
|
|
3091
3072
|
* @returns
|
|
3092
3073
|
*/
|
|
3093
3074
|
function getInputCSS(prop, isNumber) {
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3075
|
+
const val = DOMUtilsContext.windowApi.document.defaultView.getComputedStyle($input, null).getPropertyValue(prop);
|
|
3076
|
+
if (isNumber) {
|
|
3077
|
+
return parseFloat(val);
|
|
3078
|
+
}
|
|
3079
|
+
else {
|
|
3080
|
+
return val;
|
|
3081
|
+
}
|
|
3098
3082
|
}
|
|
3099
3083
|
}
|
|
3100
3084
|
/** 获取 animationend 在各个浏览器的兼容名 */
|
|
@@ -3106,7 +3090,7 @@
|
|
|
3106
3090
|
return DOMUtilsCommonUtils.getTransitionEndNameList();
|
|
3107
3091
|
}
|
|
3108
3092
|
}
|
|
3109
|
-
|
|
3093
|
+
const domUtils = new DOMUtils();
|
|
3110
3094
|
|
|
3111
3095
|
return domUtils;
|
|
3112
3096
|
|