@whitesev/domutils 1.3.3 → 1.3.5

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/dist/index.esm.js CHANGED
@@ -593,11 +593,18 @@ class DOMUtilsEvent {
593
593
  click(element, handler, details, useDispatchToTriggerEvent) {
594
594
  let DOMUtilsContext = this;
595
595
  if (typeof element === "string") {
596
- element = DOMUtilsContext.windowApi.document.querySelector(element);
596
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
597
597
  }
598
598
  if (element == null) {
599
599
  return;
600
600
  }
601
+ if (isNodeList(element)) {
602
+ // 设置
603
+ element.forEach(($ele) => {
604
+ DOMUtilsContext.click($ele, handler, details, useDispatchToTriggerEvent);
605
+ });
606
+ return;
607
+ }
601
608
  if (handler == null) {
602
609
  DOMUtilsContext.trigger(element, "click", details, useDispatchToTriggerEvent);
603
610
  }
@@ -627,6 +634,13 @@ class DOMUtilsEvent {
627
634
  if (element == null) {
628
635
  return;
629
636
  }
637
+ if (isNodeList(element)) {
638
+ // 设置
639
+ element.forEach(($ele) => {
640
+ DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
641
+ });
642
+ return;
643
+ }
630
644
  if (handler === null) {
631
645
  DOMUtilsContext.trigger(element, "blur", details, useDispatchToTriggerEvent);
632
646
  }
@@ -651,11 +665,18 @@ class DOMUtilsEvent {
651
665
  focus(element, handler, details, useDispatchToTriggerEvent) {
652
666
  let DOMUtilsContext = this;
653
667
  if (typeof element === "string") {
654
- element = DOMUtilsContext.windowApi.document.querySelector(element);
668
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
655
669
  }
656
670
  if (element == null) {
657
671
  return;
658
672
  }
673
+ if (isNodeList(element)) {
674
+ // 设置
675
+ element.forEach(($ele) => {
676
+ DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
677
+ });
678
+ return;
679
+ }
659
680
  if (handler == null) {
660
681
  DOMUtilsContext.trigger(element, "focus", details, useDispatchToTriggerEvent);
661
682
  }
@@ -680,18 +701,25 @@ class DOMUtilsEvent {
680
701
  hover(element, handler, option) {
681
702
  let DOMUtilsContext = this;
682
703
  if (typeof element === "string") {
683
- element = DOMUtilsContext.windowApi.document.querySelector(element);
704
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
684
705
  }
685
706
  if (element == null) {
686
707
  return;
687
708
  }
709
+ if (isNodeList(element)) {
710
+ // 设置
711
+ element.forEach(($ele) => {
712
+ DOMUtilsContext.hover($ele, handler, option);
713
+ });
714
+ return;
715
+ }
688
716
  DOMUtilsContext.on(element, "mouseenter", null, handler, option);
689
717
  DOMUtilsContext.on(element, "mouseleave", null, handler, option);
690
718
  }
691
719
  /**
692
720
  * 当按键松开时触发事件
693
721
  * keydown - > keypress - > keyup
694
- * @param target 当前元素
722
+ * @param element 当前元素
695
723
  * @param handler 事件处理函数
696
724
  * @param option 配置
697
725
  * @example
@@ -703,20 +731,27 @@ class DOMUtilsEvent {
703
731
  * console.log("按键松开");
704
732
  * })
705
733
  */
706
- keyup(target, handler, option) {
734
+ keyup(element, handler, option) {
707
735
  let DOMUtilsContext = this;
708
- if (target == null) {
736
+ if (element == null) {
709
737
  return;
710
738
  }
711
- if (typeof target === "string") {
712
- target = DOMUtilsContext.windowApi.document.querySelector(target);
739
+ if (typeof element === "string") {
740
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
741
+ }
742
+ if (isNodeList(element)) {
743
+ // 设置
744
+ element.forEach(($ele) => {
745
+ DOMUtilsContext.keyup($ele, handler, option);
746
+ });
747
+ return;
713
748
  }
714
- DOMUtilsContext.on(target, "keyup", null, handler, option);
749
+ DOMUtilsContext.on(element, "keyup", null, handler, option);
715
750
  }
716
751
  /**
717
752
  * 当按键按下时触发事件
718
753
  * keydown - > keypress - > keyup
719
- * @param target 目标
754
+ * @param element 目标
720
755
  * @param handler 事件处理函数
721
756
  * @param option 配置
722
757
  * @example
@@ -728,20 +763,27 @@ class DOMUtilsEvent {
728
763
  * console.log("按键按下");
729
764
  * })
730
765
  */
731
- keydown(target, handler, option) {
766
+ keydown(element, handler, option) {
732
767
  let DOMUtilsContext = this;
733
- if (target == null) {
768
+ if (element == null) {
734
769
  return;
735
770
  }
736
- if (typeof target === "string") {
737
- target = DOMUtilsContext.windowApi.document.querySelector(target);
771
+ if (typeof element === "string") {
772
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
773
+ }
774
+ if (isNodeList(element)) {
775
+ // 设置
776
+ element.forEach(($ele) => {
777
+ DOMUtilsContext.keydown($ele, handler, option);
778
+ });
779
+ return;
738
780
  }
739
- DOMUtilsContext.on(target, "keydown", null, handler, option);
781
+ DOMUtilsContext.on(element, "keydown", null, handler, option);
740
782
  }
741
783
  /**
742
784
  * 当按键按下时触发事件
743
785
  * keydown - > keypress - > keyup
744
- * @param target 目标
786
+ * @param element 目标
745
787
  * @param handler 事件处理函数
746
788
  * @param option 配置
747
789
  * @example
@@ -753,20 +795,27 @@ class DOMUtilsEvent {
753
795
  * console.log("按键按下");
754
796
  * })
755
797
  */
756
- keypress(target, handler, option) {
798
+ keypress(element, handler, option) {
757
799
  let DOMUtilsContext = this;
758
- if (target == null) {
800
+ if (element == null) {
759
801
  return;
760
802
  }
761
- if (typeof target === "string") {
762
- target = DOMUtilsContext.windowApi.document.querySelector(target);
803
+ if (typeof element === "string") {
804
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
805
+ }
806
+ if (isNodeList(element)) {
807
+ // 设置
808
+ element.forEach(($ele) => {
809
+ DOMUtilsContext.keypress($ele, handler, option);
810
+ });
811
+ return;
763
812
  }
764
- DOMUtilsContext.on(target, "keypress", null, handler, option);
813
+ DOMUtilsContext.on(element, "keypress", null, handler, option);
765
814
  }
766
815
  /**
767
816
  * 监听某个元素键盘按键事件或window全局按键事件
768
817
  * 按下有值的键时触发,按下Ctrl\Alt\Shift\Meta是无值键。按下先触发keydown事件,再触发keypress事件。
769
- * @param target 需要监听的对象,可以是全局Window或者某个元素
818
+ * @param element 需要监听的对象,可以是全局Window或者某个元素
770
819
  * @param eventName 事件名,默认keypress
771
820
  * @param callback 自己定义的回调事件,参数1为当前的key,参数2为组合按键,数组类型,包含ctrl、shift、alt和meta(win键或mac的cmd键)
772
821
  * @param options 监听事件的配置
@@ -826,7 +875,11 @@ class DOMUtilsEvent {
826
875
  搜索 170
827
876
  收藏 171
828
877
  **/
829
- listenKeyboard(target, eventName = "keypress", callback, options) {
878
+ listenKeyboard(element, eventName = "keypress", callback, options) {
879
+ let DOMUtilsContext = this;
880
+ if (typeof element === "string") {
881
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
882
+ }
830
883
  let keyboardEventCallBack = function (event) {
831
884
  /** 键名 */
832
885
  let keyName = event.key || event.code;
@@ -850,29 +903,49 @@ class DOMUtilsEvent {
850
903
  callback(keyName, keyValue, otherCodeList, event);
851
904
  }
852
905
  };
853
- this.on(target, eventName, keyboardEventCallBack, options);
906
+ DOMUtilsContext.on(element, eventName, keyboardEventCallBack, options);
854
907
  return {
855
908
  removeListen: () => {
856
- this.off(target, eventName, keyboardEventCallBack, options);
909
+ DOMUtilsContext.off(element, eventName, keyboardEventCallBack, options);
857
910
  },
858
911
  };
859
912
  }
860
913
  }
861
914
 
915
+ /**
916
+ * 判断是否是元素列表
917
+ * @param $ele
918
+ */
919
+ const isNodeList = ($ele) => {
920
+ return Array.isArray($ele) || $ele instanceof NodeList;
921
+ };
862
922
  class DOMUtils extends DOMUtilsEvent {
863
923
  constructor(option) {
864
924
  super(option);
865
925
  }
866
926
  /** 版本号 */
867
- version = "2024.9.23";
927
+ version = "2024.10.22";
868
928
  attr(element, attrName, attrValue) {
869
929
  let DOMUtilsContext = this;
870
930
  if (typeof element === "string") {
871
- element = DOMUtilsContext.windowApi.document.querySelector(element);
931
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
872
932
  }
873
933
  if (element == null) {
874
934
  return;
875
935
  }
936
+ if (isNodeList(element)) {
937
+ if (attrValue == null) {
938
+ // 获取属性
939
+ return DOMUtilsContext.attr(element[0], attrName, attrValue);
940
+ }
941
+ else {
942
+ // 设置属性
943
+ element.forEach(($ele) => {
944
+ DOMUtilsContext.attr($ele, attrName, attrValue);
945
+ });
946
+ return;
947
+ }
948
+ }
876
949
  if (attrValue == null) {
877
950
  return element.getAttribute(attrName);
878
951
  }
@@ -961,14 +1034,40 @@ class DOMUtils extends DOMUtilsEvent {
961
1034
  return propertyValue;
962
1035
  }
963
1036
  if (typeof element === "string") {
964
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1037
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
965
1038
  }
966
1039
  if (element == null) {
967
1040
  return;
968
1041
  }
1042
+ if (isNodeList(element)) {
1043
+ if (typeof property === "string") {
1044
+ if (value == null) {
1045
+ // 获取属性
1046
+ return DOMUtilsContext.css(element[0], property);
1047
+ }
1048
+ else {
1049
+ // 设置属性
1050
+ element.forEach(($ele) => {
1051
+ DOMUtilsContext.css($ele, property);
1052
+ });
1053
+ return;
1054
+ }
1055
+ }
1056
+ else if (typeof property === "object") {
1057
+ // 设置属性
1058
+ element.forEach(($ele) => {
1059
+ DOMUtilsContext.css($ele, property);
1060
+ });
1061
+ return;
1062
+ }
1063
+ else ;
1064
+ return;
1065
+ }
969
1066
  if (typeof property === "string") {
970
1067
  if (value == null) {
971
- return getComputedStyle(element).getPropertyValue(property);
1068
+ return DOMUtilsContext.windowApi.globalThis
1069
+ .getComputedStyle(element)
1070
+ .getPropertyValue(property);
972
1071
  }
973
1072
  else {
974
1073
  if (value === "string" && value.includes("!important")) {
@@ -992,15 +1091,29 @@ class DOMUtils extends DOMUtilsEvent {
992
1091
  }
993
1092
  }
994
1093
  }
1094
+ else ;
995
1095
  }
996
1096
  text(element, text) {
997
1097
  let DOMUtilsContext = this;
998
1098
  if (typeof element === "string") {
999
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1099
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1000
1100
  }
1001
1101
  if (element == null) {
1002
1102
  return;
1003
1103
  }
1104
+ if (isNodeList(element)) {
1105
+ if (text == null) {
1106
+ // 获取
1107
+ return DOMUtilsContext.text(element[0]);
1108
+ }
1109
+ else {
1110
+ // 设置
1111
+ element.forEach(($ele) => {
1112
+ DOMUtilsContext.text($ele, text);
1113
+ });
1114
+ }
1115
+ return;
1116
+ }
1004
1117
  if (text == null) {
1005
1118
  return element.textContent || element.innerText;
1006
1119
  }
@@ -1019,16 +1132,31 @@ class DOMUtils extends DOMUtilsEvent {
1019
1132
  html(element, html) {
1020
1133
  let DOMUtilsContext = this;
1021
1134
  if (typeof element === "string") {
1022
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1135
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1023
1136
  }
1024
1137
  if (element == null) {
1025
1138
  return;
1026
1139
  }
1140
+ if (isNodeList(element)) {
1141
+ if (html == null) {
1142
+ // 获取
1143
+ return DOMUtilsContext.html(element[0]);
1144
+ }
1145
+ else {
1146
+ // 设置
1147
+ element.forEach(($ele) => {
1148
+ DOMUtilsContext.html($ele, html);
1149
+ });
1150
+ }
1151
+ return;
1152
+ }
1027
1153
  if (html == null) {
1154
+ // 获取
1028
1155
  return element.innerHTML;
1029
1156
  }
1030
1157
  else {
1031
- if (html instanceof Node) {
1158
+ // 设置
1159
+ if (html instanceof Element) {
1032
1160
  html = html.innerHTML;
1033
1161
  }
1034
1162
  if ("innerHTML" in element) {
@@ -1050,7 +1178,7 @@ class DOMUtils extends DOMUtilsEvent {
1050
1178
  recovery();
1051
1179
  return transformInfo;
1052
1180
  }
1053
- let elementTransform = getComputedStyle(element).transform;
1181
+ let elementTransform = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element).transform;
1054
1182
  if (elementTransform != null &&
1055
1183
  elementTransform !== "none" &&
1056
1184
  elementTransform !== "") {
@@ -1074,12 +1202,26 @@ class DOMUtils extends DOMUtilsEvent {
1074
1202
  val(element, value) {
1075
1203
  let DOMUtilsContext = this;
1076
1204
  if (typeof element === "string") {
1077
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1205
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1078
1206
  }
1079
1207
  if (element == null) {
1080
1208
  return;
1081
1209
  }
1210
+ if (isNodeList(element)) {
1211
+ if (value == null) {
1212
+ // 获取
1213
+ return DOMUtilsContext.val(element[0]);
1214
+ }
1215
+ else {
1216
+ // 设置
1217
+ element.forEach(($ele) => {
1218
+ DOMUtilsContext.val($ele, value);
1219
+ });
1220
+ }
1221
+ return;
1222
+ }
1082
1223
  if (value == null) {
1224
+ // 获取
1083
1225
  if (element.localName === "input" &&
1084
1226
  (element.type === "checkbox" || element.type === "radio")) {
1085
1227
  return element.checked;
@@ -1089,6 +1231,7 @@ class DOMUtils extends DOMUtilsEvent {
1089
1231
  }
1090
1232
  }
1091
1233
  else {
1234
+ // 设置
1092
1235
  if (element.localName === "input" &&
1093
1236
  (element.type === "checkbox" || element.type === "radio")) {
1094
1237
  element.checked = !!value;
@@ -1100,17 +1243,30 @@ class DOMUtils extends DOMUtilsEvent {
1100
1243
  }
1101
1244
  prop(element, propName, propValue) {
1102
1245
  let DOMUtilsContext = this;
1246
+ if (typeof element === "string") {
1247
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1248
+ }
1103
1249
  if (element == null) {
1104
1250
  return;
1105
1251
  }
1106
- if (typeof element === "string") {
1107
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1252
+ if (isNodeList(element)) {
1253
+ if (propValue == null) {
1254
+ // 获取
1255
+ return DOMUtilsContext.prop(element[0], propName);
1256
+ }
1257
+ else {
1258
+ // 设置
1259
+ element.forEach(($ele) => {
1260
+ DOMUtilsContext.prop($ele, propName, propValue);
1261
+ });
1262
+ }
1263
+ return;
1108
1264
  }
1109
1265
  if (propValue == null) {
1110
- return element[propName];
1266
+ return Reflect.get(element, propName);
1111
1267
  }
1112
1268
  else {
1113
- element[propName] = propValue;
1269
+ Reflect.set(element, propName, propValue);
1114
1270
  }
1115
1271
  }
1116
1272
  /**
@@ -1125,11 +1281,18 @@ class DOMUtils extends DOMUtilsEvent {
1125
1281
  removeAttr(element, attrName) {
1126
1282
  let DOMUtilsContext = this;
1127
1283
  if (typeof element === "string") {
1128
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1284
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1129
1285
  }
1130
1286
  if (element == null) {
1131
1287
  return;
1132
1288
  }
1289
+ if (isNodeList(element)) {
1290
+ // 设置
1291
+ element.forEach(($ele) => {
1292
+ DOMUtilsContext.removeAttr($ele, attrName);
1293
+ });
1294
+ return;
1295
+ }
1133
1296
  element.removeAttribute(attrName);
1134
1297
  }
1135
1298
  /**
@@ -1144,15 +1307,30 @@ class DOMUtils extends DOMUtilsEvent {
1144
1307
  removeClass(element, className) {
1145
1308
  let DOMUtilsContext = this;
1146
1309
  if (typeof element === "string") {
1147
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1310
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1148
1311
  }
1149
1312
  if (element == null) {
1150
1313
  return;
1151
1314
  }
1152
- if (className == null) {
1315
+ if (isNodeList(element)) {
1316
+ // 设置
1317
+ element.forEach(($ele) => {
1318
+ DOMUtilsContext.removeClass($ele, className);
1319
+ });
1153
1320
  return;
1154
1321
  }
1155
- element.classList.remove(className);
1322
+ if (className == null) {
1323
+ // 清空全部className
1324
+ element.className = "";
1325
+ }
1326
+ else {
1327
+ if (!Array.isArray(className)) {
1328
+ className = className.split(" ");
1329
+ }
1330
+ className.forEach((itemClassName) => {
1331
+ element.classList.remove(itemClassName);
1332
+ });
1333
+ }
1156
1334
  }
1157
1335
  /**
1158
1336
  * 移除元素的属性
@@ -1166,11 +1344,18 @@ class DOMUtils extends DOMUtilsEvent {
1166
1344
  removeProp(element, propName) {
1167
1345
  let DOMUtilsContext = this;
1168
1346
  if (typeof element === "string") {
1169
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1347
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1170
1348
  }
1171
1349
  if (element == null) {
1172
1350
  return;
1173
1351
  }
1352
+ if (isNodeList(element)) {
1353
+ // 设置
1354
+ element.forEach(($ele) => {
1355
+ DOMUtilsContext.removeProp($ele, propName);
1356
+ });
1357
+ return;
1358
+ }
1174
1359
  DOMUtilsCommonUtils.delete(element, propName);
1175
1360
  }
1176
1361
  /**
@@ -1185,22 +1370,22 @@ class DOMUtils extends DOMUtilsEvent {
1185
1370
  replaceWith(element, newElement) {
1186
1371
  let DOMUtilsContext = this;
1187
1372
  if (typeof element === "string") {
1188
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1373
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1189
1374
  }
1190
1375
  if (element == null) {
1191
1376
  return;
1192
1377
  }
1193
- if (typeof newElement === "string") {
1194
- newElement = DOMUtilsContext.parseHTML(newElement, false, false);
1195
- }
1196
- if (element instanceof NodeList || element instanceof Array) {
1197
- element.forEach((item) => {
1198
- DOMUtilsContext.replaceWith(item, newElement);
1378
+ if (isNodeList(element)) {
1379
+ // 设置
1380
+ element.forEach(($ele) => {
1381
+ DOMUtilsContext.replaceWith($ele, newElement);
1199
1382
  });
1383
+ return;
1200
1384
  }
1201
- else {
1202
- element.parentElement.replaceChild(newElement, element);
1385
+ if (typeof newElement === "string") {
1386
+ newElement = DOMUtilsContext.parseHTML(newElement, false, false);
1203
1387
  }
1388
+ element.parentElement.replaceChild(newElement, element);
1204
1389
  }
1205
1390
  /**
1206
1391
  * 给元素添加class
@@ -1214,12 +1399,27 @@ class DOMUtils extends DOMUtilsEvent {
1214
1399
  addClass(element, className) {
1215
1400
  let DOMUtilsContext = this;
1216
1401
  if (typeof element === "string") {
1217
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1402
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1218
1403
  }
1219
1404
  if (element == null) {
1220
1405
  return;
1221
1406
  }
1222
- element.classList.add(className);
1407
+ if (isNodeList(element)) {
1408
+ // 设置
1409
+ element.forEach(($ele) => {
1410
+ DOMUtilsContext.addClass($ele, className);
1411
+ });
1412
+ return;
1413
+ }
1414
+ if (!Array.isArray(className)) {
1415
+ className = className.split(" ");
1416
+ }
1417
+ className.forEach((itemClassName) => {
1418
+ if (itemClassName.trim() == "") {
1419
+ return;
1420
+ }
1421
+ element.classList.add(itemClassName);
1422
+ });
1223
1423
  }
1224
1424
  /**
1225
1425
  * 函数在元素内部末尾添加子元素或HTML字符串
@@ -1233,11 +1433,18 @@ class DOMUtils extends DOMUtilsEvent {
1233
1433
  append(element, content) {
1234
1434
  let DOMUtilsContext = this;
1235
1435
  if (typeof element === "string") {
1236
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1436
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1237
1437
  }
1238
1438
  if (element == null) {
1239
1439
  return;
1240
1440
  }
1441
+ if (isNodeList(element)) {
1442
+ // 设置
1443
+ element.forEach(($ele) => {
1444
+ DOMUtilsContext.append($ele, content);
1445
+ });
1446
+ return;
1447
+ }
1241
1448
  function elementAppendChild(ele, text) {
1242
1449
  if (typeof content === "string") {
1243
1450
  ele.insertAdjacentHTML("beforeend", text);
@@ -1251,7 +1458,7 @@ class DOMUtils extends DOMUtilsEvent {
1251
1458
  let fragment = DOMUtilsContext.windowApi.document.createDocumentFragment();
1252
1459
  content.forEach((ele) => {
1253
1460
  if (typeof ele === "string") {
1254
- ele = this.parseHTML(ele, true, false);
1461
+ ele = DOMUtilsContext.parseHTML(ele, true, false);
1255
1462
  }
1256
1463
  fragment.appendChild(ele);
1257
1464
  });
@@ -1273,11 +1480,18 @@ class DOMUtils extends DOMUtilsEvent {
1273
1480
  prepend(element, content) {
1274
1481
  let DOMUtilsContext = this;
1275
1482
  if (typeof element === "string") {
1276
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1483
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1277
1484
  }
1278
1485
  if (element == null) {
1279
1486
  return;
1280
1487
  }
1488
+ if (isNodeList(element)) {
1489
+ // 设置
1490
+ element.forEach(($ele) => {
1491
+ DOMUtilsContext.prepend($ele, content);
1492
+ });
1493
+ return;
1494
+ }
1281
1495
  if (typeof content === "string") {
1282
1496
  element.insertAdjacentHTML("afterbegin", content);
1283
1497
  }
@@ -1303,11 +1517,18 @@ class DOMUtils extends DOMUtilsEvent {
1303
1517
  after(element, content) {
1304
1518
  let DOMUtilsContext = this;
1305
1519
  if (typeof element === "string") {
1306
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1520
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1307
1521
  }
1308
1522
  if (element == null) {
1309
1523
  return;
1310
1524
  }
1525
+ if (isNodeList(element)) {
1526
+ // 设置
1527
+ element.forEach(($ele) => {
1528
+ DOMUtilsContext.after($ele, content);
1529
+ });
1530
+ return;
1531
+ }
1311
1532
  if (typeof content === "string") {
1312
1533
  element.insertAdjacentHTML("afterend", content);
1313
1534
  }
@@ -1335,11 +1556,18 @@ class DOMUtils extends DOMUtilsEvent {
1335
1556
  before(element, content) {
1336
1557
  let DOMUtilsContext = this;
1337
1558
  if (typeof element === "string") {
1338
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1559
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1339
1560
  }
1340
1561
  if (element == null) {
1341
1562
  return;
1342
1563
  }
1564
+ if (isNodeList(element)) {
1565
+ // 设置
1566
+ element.forEach(($ele) => {
1567
+ DOMUtilsContext.before($ele, content);
1568
+ });
1569
+ return;
1570
+ }
1343
1571
  if (typeof content === "string") {
1344
1572
  element.insertAdjacentHTML("beforebegin", content);
1345
1573
  }
@@ -1355,30 +1583,28 @@ class DOMUtils extends DOMUtilsEvent {
1355
1583
  }
1356
1584
  /**
1357
1585
  * 移除元素
1358
- * @param target 目标元素
1586
+ * @param element 目标元素
1359
1587
  * @example
1360
1588
  * // 元素a.xx前面添加一个元素
1361
1589
  * DOMUtils.remove(document.querySelector("a.xx"))
1362
1590
  * DOMUtils.remove(document.querySelectorAll("a.xx"))
1363
1591
  * DOMUtils.remove("a.xx")
1364
1592
  * */
1365
- remove(target) {
1593
+ remove(element) {
1366
1594
  let DOMUtilsContext = this;
1367
- if (typeof target === "string") {
1368
- target = DOMUtilsContext.windowApi.document.querySelectorAll(target);
1595
+ if (typeof element === "string") {
1596
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1369
1597
  }
1370
- if (target == null) {
1598
+ if (element == null) {
1371
1599
  return;
1372
1600
  }
1373
- if (target instanceof NodeList || target instanceof Array) {
1374
- target = target;
1375
- for (const element of target) {
1376
- DOMUtilsContext.remove(element);
1377
- }
1378
- }
1379
- else {
1380
- target.remove();
1601
+ if (isNodeList(element)) {
1602
+ element.forEach(($ele) => {
1603
+ DOMUtilsContext.remove($ele);
1604
+ });
1605
+ return;
1381
1606
  }
1607
+ element.remove();
1382
1608
  }
1383
1609
  /**
1384
1610
  * 移除元素的所有子元素
@@ -1391,11 +1617,18 @@ class DOMUtils extends DOMUtilsEvent {
1391
1617
  empty(element) {
1392
1618
  let DOMUtilsContext = this;
1393
1619
  if (typeof element === "string") {
1394
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1620
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1395
1621
  }
1396
1622
  if (element == null) {
1397
1623
  return;
1398
1624
  }
1625
+ if (isNodeList(element)) {
1626
+ // 设置
1627
+ element.forEach(($ele) => {
1628
+ DOMUtilsContext.empty($ele);
1629
+ });
1630
+ return;
1631
+ }
1399
1632
  element.innerHTML = "";
1400
1633
  }
1401
1634
  /**
@@ -1426,7 +1659,8 @@ class DOMUtils extends DOMUtilsEvent {
1426
1659
  width(element, isShow = false) {
1427
1660
  let DOMUtilsContext = this;
1428
1661
  if (typeof element === "string") {
1429
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1662
+ element =
1663
+ DOMUtilsContext.windowApi.document.querySelector(element);
1430
1664
  }
1431
1665
  if (element == null) {
1432
1666
  return;
@@ -1538,7 +1772,7 @@ class DOMUtils extends DOMUtilsEvent {
1538
1772
  }
1539
1773
  element = element;
1540
1774
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1541
- let style = getComputedStyle(element, null);
1775
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element, null);
1542
1776
  let marginLeft = DOMUtilsCommonUtils.getStyleValue(style, "marginLeft");
1543
1777
  let marginRight = DOMUtilsCommonUtils.getStyleValue(style, "marginRight");
1544
1778
  return element.offsetWidth + marginLeft + marginRight;
@@ -1564,7 +1798,7 @@ class DOMUtils extends DOMUtilsEvent {
1564
1798
  }
1565
1799
  element = element;
1566
1800
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1567
- let style = getComputedStyle(element, null);
1801
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element, null);
1568
1802
  let marginTop = DOMUtilsCommonUtils.getStyleValue(style, "marginTop");
1569
1803
  let marginBottom = DOMUtilsCommonUtils.getStyleValue(style, "marginBottom");
1570
1804
  return element.offsetHeight + marginTop + marginBottom;
@@ -1591,11 +1825,18 @@ class DOMUtils extends DOMUtilsEvent {
1591
1825
  animate(element, styles, duration = 1000, callback = null) {
1592
1826
  let DOMUtilsContext = this;
1593
1827
  if (typeof element === "string") {
1594
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1828
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1595
1829
  }
1596
1830
  if (element == null) {
1597
1831
  return;
1598
1832
  }
1833
+ if (isNodeList(element)) {
1834
+ // 设置
1835
+ element.forEach(($ele) => {
1836
+ DOMUtilsContext.animate($ele, styles, duration, callback);
1837
+ });
1838
+ return;
1839
+ }
1599
1840
  if (typeof duration !== "number" || duration <= 0) {
1600
1841
  throw new TypeError("duration must be a positive number");
1601
1842
  }
@@ -1612,7 +1853,9 @@ class DOMUtils extends DOMUtilsEvent {
1612
1853
  let from = {};
1613
1854
  let to = {};
1614
1855
  for (let prop in styles) {
1615
- from[prop] = element.style[prop] || getComputedStyle(element)[prop];
1856
+ from[prop] =
1857
+ element.style[prop] ||
1858
+ DOMUtilsContext.windowApi.globalThis.getComputedStyle(element)[prop];
1616
1859
  to[prop] = styles[prop];
1617
1860
  }
1618
1861
  let timer = setInterval(function () {
@@ -1644,18 +1887,26 @@ class DOMUtils extends DOMUtilsEvent {
1644
1887
  wrap(element, wrapperHTML) {
1645
1888
  let DOMUtilsContext = this;
1646
1889
  if (typeof element === "string") {
1647
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1890
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1648
1891
  }
1649
1892
  if (element == null) {
1650
1893
  return;
1651
1894
  }
1895
+ if (isNodeList(element)) {
1896
+ // 设置
1897
+ element.forEach(($ele) => {
1898
+ DOMUtilsContext.wrap($ele, wrapperHTML);
1899
+ });
1900
+ return;
1901
+ }
1652
1902
  element = element;
1653
1903
  // 创建一个新的div元素,并将wrapperHTML作为其innerHTML
1654
1904
  let wrapper = DOMUtilsContext.windowApi.document.createElement("div");
1655
1905
  wrapper.innerHTML = wrapperHTML;
1656
1906
  let wrapperFirstChild = wrapper.firstChild;
1657
1907
  // 将要包裹的元素插入目标元素前面
1658
- element.parentElement.insertBefore(wrapperFirstChild, element);
1908
+ let parentElement = element.parentElement;
1909
+ parentElement.insertBefore(wrapperFirstChild, element);
1659
1910
  // 将要包裹的元素移动到wrapper中
1660
1911
  wrapperFirstChild.appendChild(element);
1661
1912
  }
@@ -1735,6 +1986,8 @@ class DOMUtils extends DOMUtilsEvent {
1735
1986
  }
1736
1987
  parseHTML(html, useParser = false, isComplete = false) {
1737
1988
  let DOMUtilsContext = this;
1989
+ // 去除html前后的空格
1990
+ html = html.trim();
1738
1991
  function parseHTMLByDOMParser() {
1739
1992
  let parser = new DOMParser();
1740
1993
  if (isComplete) {
@@ -1761,16 +2014,61 @@ class DOMUtils extends DOMUtilsEvent {
1761
2014
  return parseHTMLByCreateDom();
1762
2015
  }
1763
2016
  }
2017
+ /**
2018
+ * 序列化表单元素
2019
+ * @param $form 表单元素
2020
+ * @example
2021
+ * DOMUtils.serialize(document.querySelector("form"))
2022
+ * > xxx=xxx&aaa=
2023
+ */
2024
+ serialize($form) {
2025
+ const elements = $form.elements;
2026
+ let serializedArray = [];
2027
+ for (let i = 0; i < elements.length; i++) {
2028
+ const element = elements[i];
2029
+ if (element.name &&
2030
+ !element.disabled &&
2031
+ (element.checked ||
2032
+ [
2033
+ "text",
2034
+ "hidden",
2035
+ "password",
2036
+ "textarea",
2037
+ "select-one",
2038
+ "select-multiple",
2039
+ ].includes(element.type))) {
2040
+ if (element.type === "select-multiple") {
2041
+ for (let j = 0; j < element.options.length; j++) {
2042
+ if (element.options[j].selected) {
2043
+ serializedArray.push({
2044
+ name: element.name,
2045
+ value: element.options[j].value,
2046
+ });
2047
+ }
2048
+ }
2049
+ }
2050
+ else {
2051
+ serializedArray.push({ name: element.name, value: element.value });
2052
+ }
2053
+ }
2054
+ }
2055
+ return serializedArray
2056
+ .map((item) => `${encodeURIComponent(item.name)}=${encodeURIComponent(item.value)}`)
2057
+ .join("&");
2058
+ }
1764
2059
  /**
1765
2060
  * 显示元素
1766
2061
  * @param target 当前元素
2062
+ * @param checkVisiblie 是否检测元素是否显示
2063
+ * + true (默认)如果检测到还未显示,则强制使用display: unset !important;
2064
+ * + false 不检测,直接设置display属性为空
1767
2065
  * @example
1768
2066
  * // 显示a.xx元素
1769
2067
  * DOMUtils.show(document.querySelector("a.xx"))
1770
2068
  * DOMUtils.show(document.querySelectorAll("a.xx"))
1771
2069
  * DOMUtils.show("a.xx")
1772
2070
  */
1773
- show(target) {
2071
+ show(target, checkVisiblie = true) {
1774
2072
  let DOMUtilsContext = this;
1775
2073
  if (target == null) {
1776
2074
  return;
@@ -1781,28 +2079,33 @@ class DOMUtils extends DOMUtilsEvent {
1781
2079
  if (target instanceof NodeList || target instanceof Array) {
1782
2080
  target = target;
1783
2081
  for (const element of target) {
1784
- DOMUtilsContext.show(element);
2082
+ DOMUtilsContext.show(element, checkVisiblie);
1785
2083
  }
1786
2084
  }
1787
2085
  else {
1788
2086
  target = target;
1789
2087
  target.style.display = "";
1790
- if (!DOMUtilsCommonUtils.isShow(target)) {
1791
- /* 仍然是不显示,尝试使用强覆盖 */
1792
- target.style.setProperty("display", "unset", "important");
2088
+ if (checkVisiblie) {
2089
+ if (!DOMUtilsCommonUtils.isShow(target)) {
2090
+ /* 仍然是不显示,尝试使用强覆盖 */
2091
+ target.style.setProperty("display", "unset", "important");
2092
+ }
1793
2093
  }
1794
2094
  }
1795
2095
  }
1796
2096
  /**
1797
2097
  * 隐藏元素
1798
2098
  * @param target 当前元素
2099
+ * @param checkVisiblie 是否检测元素是否显示
2100
+ * + true (默认)如果检测到显示,则强制使用display: none !important;
2101
+ * + false 不检测,直接设置display属性为none
1799
2102
  * @example
1800
2103
  * // 隐藏a.xx元素
1801
2104
  * DOMUtils.hide(document.querySelector("a.xx"))
1802
2105
  * DOMUtils.hide(document.querySelectorAll("a.xx"))
1803
2106
  * DOMUtils.hide("a.xx")
1804
2107
  */
1805
- hide(target) {
2108
+ hide(target, checkVisiblie = true) {
1806
2109
  let DOMUtilsContext = this;
1807
2110
  if (target == null) {
1808
2111
  return;
@@ -1813,15 +2116,17 @@ class DOMUtils extends DOMUtilsEvent {
1813
2116
  if (target instanceof NodeList || target instanceof Array) {
1814
2117
  target = target;
1815
2118
  for (const element of target) {
1816
- DOMUtilsContext.hide(element);
2119
+ DOMUtilsContext.hide(element, checkVisiblie);
1817
2120
  }
1818
2121
  }
1819
2122
  else {
1820
2123
  target = target;
1821
2124
  target.style.display = "none";
1822
- if (DOMUtilsCommonUtils.isShow(target)) {
1823
- /* 仍然是显示,尝试使用强覆盖 */
1824
- target.style.setProperty("display", "none", "important");
2125
+ if (checkVisiblie) {
2126
+ if (DOMUtilsCommonUtils.isShow(target)) {
2127
+ /* 仍然是显示,尝试使用强覆盖 */
2128
+ target.style.setProperty("display", "none", "important");
2129
+ }
1825
2130
  }
1826
2131
  }
1827
2132
  }
@@ -1845,9 +2150,15 @@ class DOMUtils extends DOMUtilsEvent {
1845
2150
  }
1846
2151
  let DOMUtilsContext = this;
1847
2152
  if (typeof element === "string") {
1848
- element = DOMUtilsContext.windowApi.document.querySelector(element);
2153
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
2154
+ }
2155
+ if (isNodeList(element)) {
2156
+ // 设置
2157
+ element.forEach(($ele) => {
2158
+ DOMUtilsContext.fadeIn($ele, duration, callback);
2159
+ });
2160
+ return;
1849
2161
  }
1850
- element = element;
1851
2162
  element.style.opacity = "0";
1852
2163
  element.style.display = "";
1853
2164
  let start = null;
@@ -1890,9 +2201,15 @@ class DOMUtils extends DOMUtilsEvent {
1890
2201
  return;
1891
2202
  }
1892
2203
  if (typeof element === "string") {
1893
- element = DOMUtilsContext.windowApi.document.querySelector(element);
2204
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
2205
+ }
2206
+ if (isNodeList(element)) {
2207
+ // 设置
2208
+ element.forEach(($ele) => {
2209
+ DOMUtilsContext.fadeOut($ele, duration, callback);
2210
+ });
2211
+ return;
1894
2212
  }
1895
- element = element;
1896
2213
  element.style.opacity = "1";
1897
2214
  let start = null;
1898
2215
  let timer = null;
@@ -1918,24 +2235,34 @@ class DOMUtils extends DOMUtilsEvent {
1918
2235
  /**
1919
2236
  * 切换元素的显示和隐藏状态
1920
2237
  * @param element 当前元素
2238
+ * @param checkVisiblie 是否检测元素是否显示
1921
2239
  * @example
1922
2240
  * // 如果元素a.xx当前是隐藏,则显示,如果是显示,则隐藏
1923
2241
  * DOMUtils.toggle(document.querySelector("a.xx"))
1924
2242
  * DOMUtils.toggle("a.xx")
1925
2243
  */
1926
- toggle(element) {
2244
+ toggle(element, checkVisiblie) {
1927
2245
  let DOMUtilsContext = this;
1928
2246
  if (typeof element === "string") {
1929
- element = DOMUtilsContext.windowApi.document.querySelector(element);
2247
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1930
2248
  }
1931
2249
  if (element == null) {
1932
2250
  return;
1933
2251
  }
1934
- if (getComputedStyle(element).getPropertyValue("display") === "none") {
1935
- DOMUtilsContext.show(element);
2252
+ if (isNodeList(element)) {
2253
+ // 设置
2254
+ element.forEach(($ele) => {
2255
+ DOMUtilsContext.toggle($ele);
2256
+ });
2257
+ return;
2258
+ }
2259
+ if (DOMUtilsContext.windowApi.globalThis
2260
+ .getComputedStyle(element)
2261
+ .getPropertyValue("display") === "none") {
2262
+ DOMUtilsContext.show(element, checkVisiblie);
1936
2263
  }
1937
2264
  else {
1938
- DOMUtilsContext.hide(element);
2265
+ DOMUtilsContext.hide(element, checkVisiblie);
1939
2266
  }
1940
2267
  }
1941
2268
  /**