@whitesev/domutils 1.3.4 → 1.3.6

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);
713
741
  }
714
- DOMUtilsContext.on(target, "keyup", null, handler, option);
742
+ if (isNodeList(element)) {
743
+ // 设置
744
+ element.forEach(($ele) => {
745
+ DOMUtilsContext.keyup($ele, handler, option);
746
+ });
747
+ return;
748
+ }
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);
738
773
  }
739
- DOMUtilsContext.on(target, "keydown", null, handler, option);
774
+ if (isNodeList(element)) {
775
+ // 设置
776
+ element.forEach(($ele) => {
777
+ DOMUtilsContext.keydown($ele, handler, option);
778
+ });
779
+ return;
780
+ }
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,90 @@ 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
  }
913
+ selector(selector) {
914
+ return this.selectorAll(selector)[0];
915
+ }
916
+ selectorAll(selector) {
917
+ const context = this;
918
+ selector = selector.trim();
919
+ if (selector.match(/[^\s]{1}:empty$/gi)) {
920
+ // empty 语法
921
+ selector = selector.replace(/:empty$/gi, "");
922
+ return Array.from(context.windowApi.document.querySelectorAll(selector)).filter(($ele) => {
923
+ return $ele?.innerHTML?.trim() === "";
924
+ });
925
+ }
926
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/gi) ||
927
+ selector.match(/[^\s]{1}:contains\('(.*)'\)$/gi)) {
928
+ // contains 语法
929
+ let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
930
+ let text = textMatch[2];
931
+ selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
932
+ return Array.from(context.windowApi.document.querySelectorAll(selector)).filter(($ele) => {
933
+ // @ts-ignore
934
+ return ($ele?.textContent || $ele?.innerText)?.includes(text);
935
+ });
936
+ }
937
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/gi) ||
938
+ selector.match(/[^\s]{1}:regexp\('(.*)'\)$/gi)) {
939
+ // regexp 语法
940
+ let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
941
+ let text = textMatch[2];
942
+ let regexp = new RegExp(text);
943
+ selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
944
+ return Array.from(context.windowApi.document.querySelectorAll(selector)).filter(($ele) => {
945
+ // @ts-ignore
946
+ return Boolean(($ele?.textContent || $ele?.innerText)?.match(regexp));
947
+ });
948
+ }
949
+ else {
950
+ // 普通语法
951
+ return Array.from(context.windowApi.document.querySelectorAll(selector));
952
+ }
953
+ }
860
954
  }
861
955
 
956
+ /**
957
+ * 判断是否是元素列表
958
+ * @param $ele
959
+ */
960
+ const isNodeList = ($ele) => {
961
+ return Array.isArray($ele) || $ele instanceof NodeList;
962
+ };
862
963
  class DOMUtils extends DOMUtilsEvent {
863
964
  constructor(option) {
864
965
  super(option);
865
966
  }
866
967
  /** 版本号 */
867
- version = "2024.10.19";
968
+ version = "2024.10.22";
868
969
  attr(element, attrName, attrValue) {
869
970
  let DOMUtilsContext = this;
870
971
  if (typeof element === "string") {
871
- element = DOMUtilsContext.windowApi.document.querySelector(element);
972
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
872
973
  }
873
974
  if (element == null) {
874
975
  return;
875
976
  }
977
+ if (isNodeList(element)) {
978
+ if (attrValue == null) {
979
+ // 获取属性
980
+ return DOMUtilsContext.attr(element[0], attrName, attrValue);
981
+ }
982
+ else {
983
+ // 设置属性
984
+ element.forEach(($ele) => {
985
+ DOMUtilsContext.attr($ele, attrName, attrValue);
986
+ });
987
+ return;
988
+ }
989
+ }
876
990
  if (attrValue == null) {
877
991
  return element.getAttribute(attrName);
878
992
  }
@@ -961,14 +1075,40 @@ class DOMUtils extends DOMUtilsEvent {
961
1075
  return propertyValue;
962
1076
  }
963
1077
  if (typeof element === "string") {
964
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1078
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
965
1079
  }
966
1080
  if (element == null) {
967
1081
  return;
968
1082
  }
1083
+ if (isNodeList(element)) {
1084
+ if (typeof property === "string") {
1085
+ if (value == null) {
1086
+ // 获取属性
1087
+ return DOMUtilsContext.css(element[0], property);
1088
+ }
1089
+ else {
1090
+ // 设置属性
1091
+ element.forEach(($ele) => {
1092
+ DOMUtilsContext.css($ele, property);
1093
+ });
1094
+ return;
1095
+ }
1096
+ }
1097
+ else if (typeof property === "object") {
1098
+ // 设置属性
1099
+ element.forEach(($ele) => {
1100
+ DOMUtilsContext.css($ele, property);
1101
+ });
1102
+ return;
1103
+ }
1104
+ else ;
1105
+ return;
1106
+ }
969
1107
  if (typeof property === "string") {
970
1108
  if (value == null) {
971
- return getComputedStyle(element).getPropertyValue(property);
1109
+ return DOMUtilsContext.windowApi.globalThis
1110
+ .getComputedStyle(element)
1111
+ .getPropertyValue(property);
972
1112
  }
973
1113
  else {
974
1114
  if (value === "string" && value.includes("!important")) {
@@ -992,15 +1132,29 @@ class DOMUtils extends DOMUtilsEvent {
992
1132
  }
993
1133
  }
994
1134
  }
1135
+ else ;
995
1136
  }
996
1137
  text(element, text) {
997
1138
  let DOMUtilsContext = this;
998
1139
  if (typeof element === "string") {
999
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1140
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1000
1141
  }
1001
1142
  if (element == null) {
1002
1143
  return;
1003
1144
  }
1145
+ if (isNodeList(element)) {
1146
+ if (text == null) {
1147
+ // 获取
1148
+ return DOMUtilsContext.text(element[0]);
1149
+ }
1150
+ else {
1151
+ // 设置
1152
+ element.forEach(($ele) => {
1153
+ DOMUtilsContext.text($ele, text);
1154
+ });
1155
+ }
1156
+ return;
1157
+ }
1004
1158
  if (text == null) {
1005
1159
  return element.textContent || element.innerText;
1006
1160
  }
@@ -1019,15 +1173,30 @@ class DOMUtils extends DOMUtilsEvent {
1019
1173
  html(element, html) {
1020
1174
  let DOMUtilsContext = this;
1021
1175
  if (typeof element === "string") {
1022
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1176
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1023
1177
  }
1024
1178
  if (element == null) {
1025
1179
  return;
1026
1180
  }
1181
+ if (isNodeList(element)) {
1182
+ if (html == null) {
1183
+ // 获取
1184
+ return DOMUtilsContext.html(element[0]);
1185
+ }
1186
+ else {
1187
+ // 设置
1188
+ element.forEach(($ele) => {
1189
+ DOMUtilsContext.html($ele, html);
1190
+ });
1191
+ }
1192
+ return;
1193
+ }
1027
1194
  if (html == null) {
1195
+ // 获取
1028
1196
  return element.innerHTML;
1029
1197
  }
1030
1198
  else {
1199
+ // 设置
1031
1200
  if (html instanceof Element) {
1032
1201
  html = html.innerHTML;
1033
1202
  }
@@ -1050,7 +1219,7 @@ class DOMUtils extends DOMUtilsEvent {
1050
1219
  recovery();
1051
1220
  return transformInfo;
1052
1221
  }
1053
- let elementTransform = getComputedStyle(element).transform;
1222
+ let elementTransform = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element).transform;
1054
1223
  if (elementTransform != null &&
1055
1224
  elementTransform !== "none" &&
1056
1225
  elementTransform !== "") {
@@ -1074,12 +1243,26 @@ class DOMUtils extends DOMUtilsEvent {
1074
1243
  val(element, value) {
1075
1244
  let DOMUtilsContext = this;
1076
1245
  if (typeof element === "string") {
1077
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1246
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1078
1247
  }
1079
1248
  if (element == null) {
1080
1249
  return;
1081
1250
  }
1251
+ if (isNodeList(element)) {
1252
+ if (value == null) {
1253
+ // 获取
1254
+ return DOMUtilsContext.val(element[0]);
1255
+ }
1256
+ else {
1257
+ // 设置
1258
+ element.forEach(($ele) => {
1259
+ DOMUtilsContext.val($ele, value);
1260
+ });
1261
+ }
1262
+ return;
1263
+ }
1082
1264
  if (value == null) {
1265
+ // 获取
1083
1266
  if (element.localName === "input" &&
1084
1267
  (element.type === "checkbox" || element.type === "radio")) {
1085
1268
  return element.checked;
@@ -1089,6 +1272,7 @@ class DOMUtils extends DOMUtilsEvent {
1089
1272
  }
1090
1273
  }
1091
1274
  else {
1275
+ // 设置
1092
1276
  if (element.localName === "input" &&
1093
1277
  (element.type === "checkbox" || element.type === "radio")) {
1094
1278
  element.checked = !!value;
@@ -1100,17 +1284,30 @@ class DOMUtils extends DOMUtilsEvent {
1100
1284
  }
1101
1285
  prop(element, propName, propValue) {
1102
1286
  let DOMUtilsContext = this;
1287
+ if (typeof element === "string") {
1288
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1289
+ }
1103
1290
  if (element == null) {
1104
1291
  return;
1105
1292
  }
1106
- if (typeof element === "string") {
1107
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1293
+ if (isNodeList(element)) {
1294
+ if (propValue == null) {
1295
+ // 获取
1296
+ return DOMUtilsContext.prop(element[0], propName);
1297
+ }
1298
+ else {
1299
+ // 设置
1300
+ element.forEach(($ele) => {
1301
+ DOMUtilsContext.prop($ele, propName, propValue);
1302
+ });
1303
+ }
1304
+ return;
1108
1305
  }
1109
1306
  if (propValue == null) {
1110
- return element[propName];
1307
+ return Reflect.get(element, propName);
1111
1308
  }
1112
1309
  else {
1113
- element[propName] = propValue;
1310
+ Reflect.set(element, propName, propValue);
1114
1311
  }
1115
1312
  }
1116
1313
  /**
@@ -1125,11 +1322,18 @@ class DOMUtils extends DOMUtilsEvent {
1125
1322
  removeAttr(element, attrName) {
1126
1323
  let DOMUtilsContext = this;
1127
1324
  if (typeof element === "string") {
1128
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1325
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1129
1326
  }
1130
1327
  if (element == null) {
1131
1328
  return;
1132
1329
  }
1330
+ if (isNodeList(element)) {
1331
+ // 设置
1332
+ element.forEach(($ele) => {
1333
+ DOMUtilsContext.removeAttr($ele, attrName);
1334
+ });
1335
+ return;
1336
+ }
1133
1337
  element.removeAttribute(attrName);
1134
1338
  }
1135
1339
  /**
@@ -1144,15 +1348,30 @@ class DOMUtils extends DOMUtilsEvent {
1144
1348
  removeClass(element, className) {
1145
1349
  let DOMUtilsContext = this;
1146
1350
  if (typeof element === "string") {
1147
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1351
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1148
1352
  }
1149
1353
  if (element == null) {
1150
1354
  return;
1151
1355
  }
1152
- if (className == null) {
1356
+ if (isNodeList(element)) {
1357
+ // 设置
1358
+ element.forEach(($ele) => {
1359
+ DOMUtilsContext.removeClass($ele, className);
1360
+ });
1153
1361
  return;
1154
1362
  }
1155
- element.classList.remove(className);
1363
+ if (className == null) {
1364
+ // 清空全部className
1365
+ element.className = "";
1366
+ }
1367
+ else {
1368
+ if (!Array.isArray(className)) {
1369
+ className = className.split(" ");
1370
+ }
1371
+ className.forEach((itemClassName) => {
1372
+ element.classList.remove(itemClassName);
1373
+ });
1374
+ }
1156
1375
  }
1157
1376
  /**
1158
1377
  * 移除元素的属性
@@ -1166,11 +1385,18 @@ class DOMUtils extends DOMUtilsEvent {
1166
1385
  removeProp(element, propName) {
1167
1386
  let DOMUtilsContext = this;
1168
1387
  if (typeof element === "string") {
1169
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1388
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1170
1389
  }
1171
1390
  if (element == null) {
1172
1391
  return;
1173
1392
  }
1393
+ if (isNodeList(element)) {
1394
+ // 设置
1395
+ element.forEach(($ele) => {
1396
+ DOMUtilsContext.removeProp($ele, propName);
1397
+ });
1398
+ return;
1399
+ }
1174
1400
  DOMUtilsCommonUtils.delete(element, propName);
1175
1401
  }
1176
1402
  /**
@@ -1185,22 +1411,22 @@ class DOMUtils extends DOMUtilsEvent {
1185
1411
  replaceWith(element, newElement) {
1186
1412
  let DOMUtilsContext = this;
1187
1413
  if (typeof element === "string") {
1188
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1414
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1189
1415
  }
1190
1416
  if (element == null) {
1191
1417
  return;
1192
1418
  }
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);
1419
+ if (isNodeList(element)) {
1420
+ // 设置
1421
+ element.forEach(($ele) => {
1422
+ DOMUtilsContext.replaceWith($ele, newElement);
1199
1423
  });
1424
+ return;
1200
1425
  }
1201
- else {
1202
- element.parentElement.replaceChild(newElement, element);
1426
+ if (typeof newElement === "string") {
1427
+ newElement = DOMUtilsContext.parseHTML(newElement, false, false);
1203
1428
  }
1429
+ element.parentElement.replaceChild(newElement, element);
1204
1430
  }
1205
1431
  /**
1206
1432
  * 给元素添加class
@@ -1214,12 +1440,27 @@ class DOMUtils extends DOMUtilsEvent {
1214
1440
  addClass(element, className) {
1215
1441
  let DOMUtilsContext = this;
1216
1442
  if (typeof element === "string") {
1217
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1443
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1218
1444
  }
1219
1445
  if (element == null) {
1220
1446
  return;
1221
1447
  }
1222
- element.classList.add(className);
1448
+ if (isNodeList(element)) {
1449
+ // 设置
1450
+ element.forEach(($ele) => {
1451
+ DOMUtilsContext.addClass($ele, className);
1452
+ });
1453
+ return;
1454
+ }
1455
+ if (!Array.isArray(className)) {
1456
+ className = className.split(" ");
1457
+ }
1458
+ className.forEach((itemClassName) => {
1459
+ if (itemClassName.trim() == "") {
1460
+ return;
1461
+ }
1462
+ element.classList.add(itemClassName);
1463
+ });
1223
1464
  }
1224
1465
  /**
1225
1466
  * 函数在元素内部末尾添加子元素或HTML字符串
@@ -1233,11 +1474,18 @@ class DOMUtils extends DOMUtilsEvent {
1233
1474
  append(element, content) {
1234
1475
  let DOMUtilsContext = this;
1235
1476
  if (typeof element === "string") {
1236
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1477
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1237
1478
  }
1238
1479
  if (element == null) {
1239
1480
  return;
1240
1481
  }
1482
+ if (isNodeList(element)) {
1483
+ // 设置
1484
+ element.forEach(($ele) => {
1485
+ DOMUtilsContext.append($ele, content);
1486
+ });
1487
+ return;
1488
+ }
1241
1489
  function elementAppendChild(ele, text) {
1242
1490
  if (typeof content === "string") {
1243
1491
  ele.insertAdjacentHTML("beforeend", text);
@@ -1251,7 +1499,7 @@ class DOMUtils extends DOMUtilsEvent {
1251
1499
  let fragment = DOMUtilsContext.windowApi.document.createDocumentFragment();
1252
1500
  content.forEach((ele) => {
1253
1501
  if (typeof ele === "string") {
1254
- ele = this.parseHTML(ele, true, false);
1502
+ ele = DOMUtilsContext.parseHTML(ele, true, false);
1255
1503
  }
1256
1504
  fragment.appendChild(ele);
1257
1505
  });
@@ -1273,11 +1521,18 @@ class DOMUtils extends DOMUtilsEvent {
1273
1521
  prepend(element, content) {
1274
1522
  let DOMUtilsContext = this;
1275
1523
  if (typeof element === "string") {
1276
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1524
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1277
1525
  }
1278
1526
  if (element == null) {
1279
1527
  return;
1280
1528
  }
1529
+ if (isNodeList(element)) {
1530
+ // 设置
1531
+ element.forEach(($ele) => {
1532
+ DOMUtilsContext.prepend($ele, content);
1533
+ });
1534
+ return;
1535
+ }
1281
1536
  if (typeof content === "string") {
1282
1537
  element.insertAdjacentHTML("afterbegin", content);
1283
1538
  }
@@ -1303,11 +1558,18 @@ class DOMUtils extends DOMUtilsEvent {
1303
1558
  after(element, content) {
1304
1559
  let DOMUtilsContext = this;
1305
1560
  if (typeof element === "string") {
1306
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1561
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1307
1562
  }
1308
1563
  if (element == null) {
1309
1564
  return;
1310
1565
  }
1566
+ if (isNodeList(element)) {
1567
+ // 设置
1568
+ element.forEach(($ele) => {
1569
+ DOMUtilsContext.after($ele, content);
1570
+ });
1571
+ return;
1572
+ }
1311
1573
  if (typeof content === "string") {
1312
1574
  element.insertAdjacentHTML("afterend", content);
1313
1575
  }
@@ -1335,11 +1597,18 @@ class DOMUtils extends DOMUtilsEvent {
1335
1597
  before(element, content) {
1336
1598
  let DOMUtilsContext = this;
1337
1599
  if (typeof element === "string") {
1338
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1600
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1339
1601
  }
1340
1602
  if (element == null) {
1341
1603
  return;
1342
1604
  }
1605
+ if (isNodeList(element)) {
1606
+ // 设置
1607
+ element.forEach(($ele) => {
1608
+ DOMUtilsContext.before($ele, content);
1609
+ });
1610
+ return;
1611
+ }
1343
1612
  if (typeof content === "string") {
1344
1613
  element.insertAdjacentHTML("beforebegin", content);
1345
1614
  }
@@ -1355,30 +1624,28 @@ class DOMUtils extends DOMUtilsEvent {
1355
1624
  }
1356
1625
  /**
1357
1626
  * 移除元素
1358
- * @param target 目标元素
1627
+ * @param element 目标元素
1359
1628
  * @example
1360
1629
  * // 元素a.xx前面添加一个元素
1361
1630
  * DOMUtils.remove(document.querySelector("a.xx"))
1362
1631
  * DOMUtils.remove(document.querySelectorAll("a.xx"))
1363
1632
  * DOMUtils.remove("a.xx")
1364
1633
  * */
1365
- remove(target) {
1634
+ remove(element) {
1366
1635
  let DOMUtilsContext = this;
1367
- if (typeof target === "string") {
1368
- target = DOMUtilsContext.windowApi.document.querySelectorAll(target);
1636
+ if (typeof element === "string") {
1637
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1369
1638
  }
1370
- if (target == null) {
1639
+ if (element == null) {
1371
1640
  return;
1372
1641
  }
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();
1642
+ if (isNodeList(element)) {
1643
+ element.forEach(($ele) => {
1644
+ DOMUtilsContext.remove($ele);
1645
+ });
1646
+ return;
1381
1647
  }
1648
+ element.remove();
1382
1649
  }
1383
1650
  /**
1384
1651
  * 移除元素的所有子元素
@@ -1391,11 +1658,18 @@ class DOMUtils extends DOMUtilsEvent {
1391
1658
  empty(element) {
1392
1659
  let DOMUtilsContext = this;
1393
1660
  if (typeof element === "string") {
1394
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1661
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1395
1662
  }
1396
1663
  if (element == null) {
1397
1664
  return;
1398
1665
  }
1666
+ if (isNodeList(element)) {
1667
+ // 设置
1668
+ element.forEach(($ele) => {
1669
+ DOMUtilsContext.empty($ele);
1670
+ });
1671
+ return;
1672
+ }
1399
1673
  element.innerHTML = "";
1400
1674
  }
1401
1675
  /**
@@ -1426,7 +1700,8 @@ class DOMUtils extends DOMUtilsEvent {
1426
1700
  width(element, isShow = false) {
1427
1701
  let DOMUtilsContext = this;
1428
1702
  if (typeof element === "string") {
1429
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1703
+ element =
1704
+ DOMUtilsContext.windowApi.document.querySelector(element);
1430
1705
  }
1431
1706
  if (element == null) {
1432
1707
  return;
@@ -1538,7 +1813,7 @@ class DOMUtils extends DOMUtilsEvent {
1538
1813
  }
1539
1814
  element = element;
1540
1815
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1541
- let style = getComputedStyle(element, null);
1816
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element, null);
1542
1817
  let marginLeft = DOMUtilsCommonUtils.getStyleValue(style, "marginLeft");
1543
1818
  let marginRight = DOMUtilsCommonUtils.getStyleValue(style, "marginRight");
1544
1819
  return element.offsetWidth + marginLeft + marginRight;
@@ -1564,7 +1839,7 @@ class DOMUtils extends DOMUtilsEvent {
1564
1839
  }
1565
1840
  element = element;
1566
1841
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1567
- let style = getComputedStyle(element, null);
1842
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element, null);
1568
1843
  let marginTop = DOMUtilsCommonUtils.getStyleValue(style, "marginTop");
1569
1844
  let marginBottom = DOMUtilsCommonUtils.getStyleValue(style, "marginBottom");
1570
1845
  return element.offsetHeight + marginTop + marginBottom;
@@ -1591,11 +1866,18 @@ class DOMUtils extends DOMUtilsEvent {
1591
1866
  animate(element, styles, duration = 1000, callback = null) {
1592
1867
  let DOMUtilsContext = this;
1593
1868
  if (typeof element === "string") {
1594
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1869
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1595
1870
  }
1596
1871
  if (element == null) {
1597
1872
  return;
1598
1873
  }
1874
+ if (isNodeList(element)) {
1875
+ // 设置
1876
+ element.forEach(($ele) => {
1877
+ DOMUtilsContext.animate($ele, styles, duration, callback);
1878
+ });
1879
+ return;
1880
+ }
1599
1881
  if (typeof duration !== "number" || duration <= 0) {
1600
1882
  throw new TypeError("duration must be a positive number");
1601
1883
  }
@@ -1612,7 +1894,9 @@ class DOMUtils extends DOMUtilsEvent {
1612
1894
  let from = {};
1613
1895
  let to = {};
1614
1896
  for (let prop in styles) {
1615
- from[prop] = element.style[prop] || getComputedStyle(element)[prop];
1897
+ from[prop] =
1898
+ element.style[prop] ||
1899
+ DOMUtilsContext.windowApi.globalThis.getComputedStyle(element)[prop];
1616
1900
  to[prop] = styles[prop];
1617
1901
  }
1618
1902
  let timer = setInterval(function () {
@@ -1644,18 +1928,26 @@ class DOMUtils extends DOMUtilsEvent {
1644
1928
  wrap(element, wrapperHTML) {
1645
1929
  let DOMUtilsContext = this;
1646
1930
  if (typeof element === "string") {
1647
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1931
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1648
1932
  }
1649
1933
  if (element == null) {
1650
1934
  return;
1651
1935
  }
1936
+ if (isNodeList(element)) {
1937
+ // 设置
1938
+ element.forEach(($ele) => {
1939
+ DOMUtilsContext.wrap($ele, wrapperHTML);
1940
+ });
1941
+ return;
1942
+ }
1652
1943
  element = element;
1653
1944
  // 创建一个新的div元素,并将wrapperHTML作为其innerHTML
1654
1945
  let wrapper = DOMUtilsContext.windowApi.document.createElement("div");
1655
1946
  wrapper.innerHTML = wrapperHTML;
1656
1947
  let wrapperFirstChild = wrapper.firstChild;
1657
1948
  // 将要包裹的元素插入目标元素前面
1658
- element.parentElement.insertBefore(wrapperFirstChild, element);
1949
+ let parentElement = element.parentElement;
1950
+ parentElement.insertBefore(wrapperFirstChild, element);
1659
1951
  // 将要包裹的元素移动到wrapper中
1660
1952
  wrapperFirstChild.appendChild(element);
1661
1953
  }
@@ -1735,6 +2027,8 @@ class DOMUtils extends DOMUtilsEvent {
1735
2027
  }
1736
2028
  parseHTML(html, useParser = false, isComplete = false) {
1737
2029
  let DOMUtilsContext = this;
2030
+ // 去除html前后的空格
2031
+ html = html.trim();
1738
2032
  function parseHTMLByDOMParser() {
1739
2033
  let parser = new DOMParser();
1740
2034
  if (isComplete) {
@@ -1761,16 +2055,61 @@ class DOMUtils extends DOMUtilsEvent {
1761
2055
  return parseHTMLByCreateDom();
1762
2056
  }
1763
2057
  }
2058
+ /**
2059
+ * 序列化表单元素
2060
+ * @param $form 表单元素
2061
+ * @example
2062
+ * DOMUtils.serialize(document.querySelector("form"))
2063
+ * > xxx=xxx&aaa=
2064
+ */
2065
+ serialize($form) {
2066
+ const elements = $form.elements;
2067
+ let serializedArray = [];
2068
+ for (let i = 0; i < elements.length; i++) {
2069
+ const element = elements[i];
2070
+ if (element.name &&
2071
+ !element.disabled &&
2072
+ (element.checked ||
2073
+ [
2074
+ "text",
2075
+ "hidden",
2076
+ "password",
2077
+ "textarea",
2078
+ "select-one",
2079
+ "select-multiple",
2080
+ ].includes(element.type))) {
2081
+ if (element.type === "select-multiple") {
2082
+ for (let j = 0; j < element.options.length; j++) {
2083
+ if (element.options[j].selected) {
2084
+ serializedArray.push({
2085
+ name: element.name,
2086
+ value: element.options[j].value,
2087
+ });
2088
+ }
2089
+ }
2090
+ }
2091
+ else {
2092
+ serializedArray.push({ name: element.name, value: element.value });
2093
+ }
2094
+ }
2095
+ }
2096
+ return serializedArray
2097
+ .map((item) => `${encodeURIComponent(item.name)}=${encodeURIComponent(item.value)}`)
2098
+ .join("&");
2099
+ }
1764
2100
  /**
1765
2101
  * 显示元素
1766
2102
  * @param target 当前元素
2103
+ * @param checkVisiblie 是否检测元素是否显示
2104
+ * + true (默认)如果检测到还未显示,则强制使用display: unset !important;
2105
+ * + false 不检测,直接设置display属性为空
1767
2106
  * @example
1768
2107
  * // 显示a.xx元素
1769
2108
  * DOMUtils.show(document.querySelector("a.xx"))
1770
2109
  * DOMUtils.show(document.querySelectorAll("a.xx"))
1771
2110
  * DOMUtils.show("a.xx")
1772
2111
  */
1773
- show(target) {
2112
+ show(target, checkVisiblie = true) {
1774
2113
  let DOMUtilsContext = this;
1775
2114
  if (target == null) {
1776
2115
  return;
@@ -1781,28 +2120,33 @@ class DOMUtils extends DOMUtilsEvent {
1781
2120
  if (target instanceof NodeList || target instanceof Array) {
1782
2121
  target = target;
1783
2122
  for (const element of target) {
1784
- DOMUtilsContext.show(element);
2123
+ DOMUtilsContext.show(element, checkVisiblie);
1785
2124
  }
1786
2125
  }
1787
2126
  else {
1788
2127
  target = target;
1789
2128
  target.style.display = "";
1790
- if (!DOMUtilsCommonUtils.isShow(target)) {
1791
- /* 仍然是不显示,尝试使用强覆盖 */
1792
- target.style.setProperty("display", "unset", "important");
2129
+ if (checkVisiblie) {
2130
+ if (!DOMUtilsCommonUtils.isShow(target)) {
2131
+ /* 仍然是不显示,尝试使用强覆盖 */
2132
+ target.style.setProperty("display", "unset", "important");
2133
+ }
1793
2134
  }
1794
2135
  }
1795
2136
  }
1796
2137
  /**
1797
2138
  * 隐藏元素
1798
2139
  * @param target 当前元素
2140
+ * @param checkVisiblie 是否检测元素是否显示
2141
+ * + true (默认)如果检测到显示,则强制使用display: none !important;
2142
+ * + false 不检测,直接设置display属性为none
1799
2143
  * @example
1800
2144
  * // 隐藏a.xx元素
1801
2145
  * DOMUtils.hide(document.querySelector("a.xx"))
1802
2146
  * DOMUtils.hide(document.querySelectorAll("a.xx"))
1803
2147
  * DOMUtils.hide("a.xx")
1804
2148
  */
1805
- hide(target) {
2149
+ hide(target, checkVisiblie = true) {
1806
2150
  let DOMUtilsContext = this;
1807
2151
  if (target == null) {
1808
2152
  return;
@@ -1813,15 +2157,17 @@ class DOMUtils extends DOMUtilsEvent {
1813
2157
  if (target instanceof NodeList || target instanceof Array) {
1814
2158
  target = target;
1815
2159
  for (const element of target) {
1816
- DOMUtilsContext.hide(element);
2160
+ DOMUtilsContext.hide(element, checkVisiblie);
1817
2161
  }
1818
2162
  }
1819
2163
  else {
1820
2164
  target = target;
1821
2165
  target.style.display = "none";
1822
- if (DOMUtilsCommonUtils.isShow(target)) {
1823
- /* 仍然是显示,尝试使用强覆盖 */
1824
- target.style.setProperty("display", "none", "important");
2166
+ if (checkVisiblie) {
2167
+ if (DOMUtilsCommonUtils.isShow(target)) {
2168
+ /* 仍然是显示,尝试使用强覆盖 */
2169
+ target.style.setProperty("display", "none", "important");
2170
+ }
1825
2171
  }
1826
2172
  }
1827
2173
  }
@@ -1845,9 +2191,15 @@ class DOMUtils extends DOMUtilsEvent {
1845
2191
  }
1846
2192
  let DOMUtilsContext = this;
1847
2193
  if (typeof element === "string") {
1848
- element = DOMUtilsContext.windowApi.document.querySelector(element);
2194
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
2195
+ }
2196
+ if (isNodeList(element)) {
2197
+ // 设置
2198
+ element.forEach(($ele) => {
2199
+ DOMUtilsContext.fadeIn($ele, duration, callback);
2200
+ });
2201
+ return;
1849
2202
  }
1850
- element = element;
1851
2203
  element.style.opacity = "0";
1852
2204
  element.style.display = "";
1853
2205
  let start = null;
@@ -1890,9 +2242,15 @@ class DOMUtils extends DOMUtilsEvent {
1890
2242
  return;
1891
2243
  }
1892
2244
  if (typeof element === "string") {
1893
- element = DOMUtilsContext.windowApi.document.querySelector(element);
2245
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
2246
+ }
2247
+ if (isNodeList(element)) {
2248
+ // 设置
2249
+ element.forEach(($ele) => {
2250
+ DOMUtilsContext.fadeOut($ele, duration, callback);
2251
+ });
2252
+ return;
1894
2253
  }
1895
- element = element;
1896
2254
  element.style.opacity = "1";
1897
2255
  let start = null;
1898
2256
  let timer = null;
@@ -1918,24 +2276,34 @@ class DOMUtils extends DOMUtilsEvent {
1918
2276
  /**
1919
2277
  * 切换元素的显示和隐藏状态
1920
2278
  * @param element 当前元素
2279
+ * @param checkVisiblie 是否检测元素是否显示
1921
2280
  * @example
1922
2281
  * // 如果元素a.xx当前是隐藏,则显示,如果是显示,则隐藏
1923
2282
  * DOMUtils.toggle(document.querySelector("a.xx"))
1924
2283
  * DOMUtils.toggle("a.xx")
1925
2284
  */
1926
- toggle(element) {
2285
+ toggle(element, checkVisiblie) {
1927
2286
  let DOMUtilsContext = this;
1928
2287
  if (typeof element === "string") {
1929
- element = DOMUtilsContext.windowApi.document.querySelector(element);
2288
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1930
2289
  }
1931
2290
  if (element == null) {
1932
2291
  return;
1933
2292
  }
1934
- if (getComputedStyle(element).getPropertyValue("display") === "none") {
1935
- DOMUtilsContext.show(element);
2293
+ if (isNodeList(element)) {
2294
+ // 设置
2295
+ element.forEach(($ele) => {
2296
+ DOMUtilsContext.toggle($ele);
2297
+ });
2298
+ return;
2299
+ }
2300
+ if (DOMUtilsContext.windowApi.globalThis
2301
+ .getComputedStyle(element)
2302
+ .getPropertyValue("display") === "none") {
2303
+ DOMUtilsContext.show(element, checkVisiblie);
1936
2304
  }
1937
2305
  else {
1938
- DOMUtilsContext.hide(element);
2306
+ DOMUtilsContext.hide(element, checkVisiblie);
1939
2307
  }
1940
2308
  }
1941
2309
  /**