@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.
@@ -596,11 +596,18 @@ var DOMUtils = (function () {
596
596
  click(element, handler, details, useDispatchToTriggerEvent) {
597
597
  let DOMUtilsContext = this;
598
598
  if (typeof element === "string") {
599
- element = DOMUtilsContext.windowApi.document.querySelector(element);
599
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
600
600
  }
601
601
  if (element == null) {
602
602
  return;
603
603
  }
604
+ if (isNodeList(element)) {
605
+ // 设置
606
+ element.forEach(($ele) => {
607
+ DOMUtilsContext.click($ele, handler, details, useDispatchToTriggerEvent);
608
+ });
609
+ return;
610
+ }
604
611
  if (handler == null) {
605
612
  DOMUtilsContext.trigger(element, "click", details, useDispatchToTriggerEvent);
606
613
  }
@@ -630,6 +637,13 @@ var DOMUtils = (function () {
630
637
  if (element == null) {
631
638
  return;
632
639
  }
640
+ if (isNodeList(element)) {
641
+ // 设置
642
+ element.forEach(($ele) => {
643
+ DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
644
+ });
645
+ return;
646
+ }
633
647
  if (handler === null) {
634
648
  DOMUtilsContext.trigger(element, "blur", details, useDispatchToTriggerEvent);
635
649
  }
@@ -654,11 +668,18 @@ var DOMUtils = (function () {
654
668
  focus(element, handler, details, useDispatchToTriggerEvent) {
655
669
  let DOMUtilsContext = this;
656
670
  if (typeof element === "string") {
657
- element = DOMUtilsContext.windowApi.document.querySelector(element);
671
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
658
672
  }
659
673
  if (element == null) {
660
674
  return;
661
675
  }
676
+ if (isNodeList(element)) {
677
+ // 设置
678
+ element.forEach(($ele) => {
679
+ DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
680
+ });
681
+ return;
682
+ }
662
683
  if (handler == null) {
663
684
  DOMUtilsContext.trigger(element, "focus", details, useDispatchToTriggerEvent);
664
685
  }
@@ -683,18 +704,25 @@ var DOMUtils = (function () {
683
704
  hover(element, handler, option) {
684
705
  let DOMUtilsContext = this;
685
706
  if (typeof element === "string") {
686
- element = DOMUtilsContext.windowApi.document.querySelector(element);
707
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
687
708
  }
688
709
  if (element == null) {
689
710
  return;
690
711
  }
712
+ if (isNodeList(element)) {
713
+ // 设置
714
+ element.forEach(($ele) => {
715
+ DOMUtilsContext.hover($ele, handler, option);
716
+ });
717
+ return;
718
+ }
691
719
  DOMUtilsContext.on(element, "mouseenter", null, handler, option);
692
720
  DOMUtilsContext.on(element, "mouseleave", null, handler, option);
693
721
  }
694
722
  /**
695
723
  * 当按键松开时触发事件
696
724
  * keydown - > keypress - > keyup
697
- * @param target 当前元素
725
+ * @param element 当前元素
698
726
  * @param handler 事件处理函数
699
727
  * @param option 配置
700
728
  * @example
@@ -706,20 +734,27 @@ var DOMUtils = (function () {
706
734
  * console.log("按键松开");
707
735
  * })
708
736
  */
709
- keyup(target, handler, option) {
737
+ keyup(element, handler, option) {
710
738
  let DOMUtilsContext = this;
711
- if (target == null) {
739
+ if (element == null) {
712
740
  return;
713
741
  }
714
- if (typeof target === "string") {
715
- target = DOMUtilsContext.windowApi.document.querySelector(target);
742
+ if (typeof element === "string") {
743
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
716
744
  }
717
- DOMUtilsContext.on(target, "keyup", null, handler, option);
745
+ if (isNodeList(element)) {
746
+ // 设置
747
+ element.forEach(($ele) => {
748
+ DOMUtilsContext.keyup($ele, handler, option);
749
+ });
750
+ return;
751
+ }
752
+ DOMUtilsContext.on(element, "keyup", null, handler, option);
718
753
  }
719
754
  /**
720
755
  * 当按键按下时触发事件
721
756
  * keydown - > keypress - > keyup
722
- * @param target 目标
757
+ * @param element 目标
723
758
  * @param handler 事件处理函数
724
759
  * @param option 配置
725
760
  * @example
@@ -731,20 +766,27 @@ var DOMUtils = (function () {
731
766
  * console.log("按键按下");
732
767
  * })
733
768
  */
734
- keydown(target, handler, option) {
769
+ keydown(element, handler, option) {
735
770
  let DOMUtilsContext = this;
736
- if (target == null) {
771
+ if (element == null) {
737
772
  return;
738
773
  }
739
- if (typeof target === "string") {
740
- target = DOMUtilsContext.windowApi.document.querySelector(target);
774
+ if (typeof element === "string") {
775
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
741
776
  }
742
- DOMUtilsContext.on(target, "keydown", null, handler, option);
777
+ if (isNodeList(element)) {
778
+ // 设置
779
+ element.forEach(($ele) => {
780
+ DOMUtilsContext.keydown($ele, handler, option);
781
+ });
782
+ return;
783
+ }
784
+ DOMUtilsContext.on(element, "keydown", null, handler, option);
743
785
  }
744
786
  /**
745
787
  * 当按键按下时触发事件
746
788
  * keydown - > keypress - > keyup
747
- * @param target 目标
789
+ * @param element 目标
748
790
  * @param handler 事件处理函数
749
791
  * @param option 配置
750
792
  * @example
@@ -756,20 +798,27 @@ var DOMUtils = (function () {
756
798
  * console.log("按键按下");
757
799
  * })
758
800
  */
759
- keypress(target, handler, option) {
801
+ keypress(element, handler, option) {
760
802
  let DOMUtilsContext = this;
761
- if (target == null) {
803
+ if (element == null) {
762
804
  return;
763
805
  }
764
- if (typeof target === "string") {
765
- target = DOMUtilsContext.windowApi.document.querySelector(target);
806
+ if (typeof element === "string") {
807
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
808
+ }
809
+ if (isNodeList(element)) {
810
+ // 设置
811
+ element.forEach(($ele) => {
812
+ DOMUtilsContext.keypress($ele, handler, option);
813
+ });
814
+ return;
766
815
  }
767
- DOMUtilsContext.on(target, "keypress", null, handler, option);
816
+ DOMUtilsContext.on(element, "keypress", null, handler, option);
768
817
  }
769
818
  /**
770
819
  * 监听某个元素键盘按键事件或window全局按键事件
771
820
  * 按下有值的键时触发,按下Ctrl\Alt\Shift\Meta是无值键。按下先触发keydown事件,再触发keypress事件。
772
- * @param target 需要监听的对象,可以是全局Window或者某个元素
821
+ * @param element 需要监听的对象,可以是全局Window或者某个元素
773
822
  * @param eventName 事件名,默认keypress
774
823
  * @param callback 自己定义的回调事件,参数1为当前的key,参数2为组合按键,数组类型,包含ctrl、shift、alt和meta(win键或mac的cmd键)
775
824
  * @param options 监听事件的配置
@@ -829,7 +878,11 @@ var DOMUtils = (function () {
829
878
  搜索 170
830
879
  收藏 171
831
880
  **/
832
- listenKeyboard(target, eventName = "keypress", callback, options) {
881
+ listenKeyboard(element, eventName = "keypress", callback, options) {
882
+ let DOMUtilsContext = this;
883
+ if (typeof element === "string") {
884
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
885
+ }
833
886
  let keyboardEventCallBack = function (event) {
834
887
  /** 键名 */
835
888
  let keyName = event.key || event.code;
@@ -853,29 +906,90 @@ var DOMUtils = (function () {
853
906
  callback(keyName, keyValue, otherCodeList, event);
854
907
  }
855
908
  };
856
- this.on(target, eventName, keyboardEventCallBack, options);
909
+ DOMUtilsContext.on(element, eventName, keyboardEventCallBack, options);
857
910
  return {
858
911
  removeListen: () => {
859
- this.off(target, eventName, keyboardEventCallBack, options);
912
+ DOMUtilsContext.off(element, eventName, keyboardEventCallBack, options);
860
913
  },
861
914
  };
862
915
  }
916
+ selector(selector) {
917
+ return this.selectorAll(selector)[0];
918
+ }
919
+ selectorAll(selector) {
920
+ const context = this;
921
+ selector = selector.trim();
922
+ if (selector.match(/[^\s]{1}:empty$/gi)) {
923
+ // empty 语法
924
+ selector = selector.replace(/:empty$/gi, "");
925
+ return Array.from(context.windowApi.document.querySelectorAll(selector)).filter(($ele) => {
926
+ return $ele?.innerHTML?.trim() === "";
927
+ });
928
+ }
929
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/gi) ||
930
+ selector.match(/[^\s]{1}:contains\('(.*)'\)$/gi)) {
931
+ // contains 语法
932
+ let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
933
+ let text = textMatch[2];
934
+ selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
935
+ return Array.from(context.windowApi.document.querySelectorAll(selector)).filter(($ele) => {
936
+ // @ts-ignore
937
+ return ($ele?.textContent || $ele?.innerText)?.includes(text);
938
+ });
939
+ }
940
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/gi) ||
941
+ selector.match(/[^\s]{1}:regexp\('(.*)'\)$/gi)) {
942
+ // regexp 语法
943
+ let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
944
+ let text = textMatch[2];
945
+ let regexp = new RegExp(text);
946
+ selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
947
+ return Array.from(context.windowApi.document.querySelectorAll(selector)).filter(($ele) => {
948
+ // @ts-ignore
949
+ return Boolean(($ele?.textContent || $ele?.innerText)?.match(regexp));
950
+ });
951
+ }
952
+ else {
953
+ // 普通语法
954
+ return Array.from(context.windowApi.document.querySelectorAll(selector));
955
+ }
956
+ }
863
957
  }
864
958
 
959
+ /**
960
+ * 判断是否是元素列表
961
+ * @param $ele
962
+ */
963
+ const isNodeList = ($ele) => {
964
+ return Array.isArray($ele) || $ele instanceof NodeList;
965
+ };
865
966
  class DOMUtils extends DOMUtilsEvent {
866
967
  constructor(option) {
867
968
  super(option);
868
969
  }
869
970
  /** 版本号 */
870
- version = "2024.10.19";
971
+ version = "2024.10.22";
871
972
  attr(element, attrName, attrValue) {
872
973
  let DOMUtilsContext = this;
873
974
  if (typeof element === "string") {
874
- element = DOMUtilsContext.windowApi.document.querySelector(element);
975
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
875
976
  }
876
977
  if (element == null) {
877
978
  return;
878
979
  }
980
+ if (isNodeList(element)) {
981
+ if (attrValue == null) {
982
+ // 获取属性
983
+ return DOMUtilsContext.attr(element[0], attrName, attrValue);
984
+ }
985
+ else {
986
+ // 设置属性
987
+ element.forEach(($ele) => {
988
+ DOMUtilsContext.attr($ele, attrName, attrValue);
989
+ });
990
+ return;
991
+ }
992
+ }
879
993
  if (attrValue == null) {
880
994
  return element.getAttribute(attrName);
881
995
  }
@@ -964,14 +1078,40 @@ var DOMUtils = (function () {
964
1078
  return propertyValue;
965
1079
  }
966
1080
  if (typeof element === "string") {
967
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1081
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
968
1082
  }
969
1083
  if (element == null) {
970
1084
  return;
971
1085
  }
1086
+ if (isNodeList(element)) {
1087
+ if (typeof property === "string") {
1088
+ if (value == null) {
1089
+ // 获取属性
1090
+ return DOMUtilsContext.css(element[0], property);
1091
+ }
1092
+ else {
1093
+ // 设置属性
1094
+ element.forEach(($ele) => {
1095
+ DOMUtilsContext.css($ele, property);
1096
+ });
1097
+ return;
1098
+ }
1099
+ }
1100
+ else if (typeof property === "object") {
1101
+ // 设置属性
1102
+ element.forEach(($ele) => {
1103
+ DOMUtilsContext.css($ele, property);
1104
+ });
1105
+ return;
1106
+ }
1107
+ else ;
1108
+ return;
1109
+ }
972
1110
  if (typeof property === "string") {
973
1111
  if (value == null) {
974
- return getComputedStyle(element).getPropertyValue(property);
1112
+ return DOMUtilsContext.windowApi.globalThis
1113
+ .getComputedStyle(element)
1114
+ .getPropertyValue(property);
975
1115
  }
976
1116
  else {
977
1117
  if (value === "string" && value.includes("!important")) {
@@ -995,15 +1135,29 @@ var DOMUtils = (function () {
995
1135
  }
996
1136
  }
997
1137
  }
1138
+ else ;
998
1139
  }
999
1140
  text(element, text) {
1000
1141
  let DOMUtilsContext = this;
1001
1142
  if (typeof element === "string") {
1002
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1143
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1003
1144
  }
1004
1145
  if (element == null) {
1005
1146
  return;
1006
1147
  }
1148
+ if (isNodeList(element)) {
1149
+ if (text == null) {
1150
+ // 获取
1151
+ return DOMUtilsContext.text(element[0]);
1152
+ }
1153
+ else {
1154
+ // 设置
1155
+ element.forEach(($ele) => {
1156
+ DOMUtilsContext.text($ele, text);
1157
+ });
1158
+ }
1159
+ return;
1160
+ }
1007
1161
  if (text == null) {
1008
1162
  return element.textContent || element.innerText;
1009
1163
  }
@@ -1022,15 +1176,30 @@ var DOMUtils = (function () {
1022
1176
  html(element, html) {
1023
1177
  let DOMUtilsContext = this;
1024
1178
  if (typeof element === "string") {
1025
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1179
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1026
1180
  }
1027
1181
  if (element == null) {
1028
1182
  return;
1029
1183
  }
1184
+ if (isNodeList(element)) {
1185
+ if (html == null) {
1186
+ // 获取
1187
+ return DOMUtilsContext.html(element[0]);
1188
+ }
1189
+ else {
1190
+ // 设置
1191
+ element.forEach(($ele) => {
1192
+ DOMUtilsContext.html($ele, html);
1193
+ });
1194
+ }
1195
+ return;
1196
+ }
1030
1197
  if (html == null) {
1198
+ // 获取
1031
1199
  return element.innerHTML;
1032
1200
  }
1033
1201
  else {
1202
+ // 设置
1034
1203
  if (html instanceof Element) {
1035
1204
  html = html.innerHTML;
1036
1205
  }
@@ -1053,7 +1222,7 @@ var DOMUtils = (function () {
1053
1222
  recovery();
1054
1223
  return transformInfo;
1055
1224
  }
1056
- let elementTransform = getComputedStyle(element).transform;
1225
+ let elementTransform = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element).transform;
1057
1226
  if (elementTransform != null &&
1058
1227
  elementTransform !== "none" &&
1059
1228
  elementTransform !== "") {
@@ -1077,12 +1246,26 @@ var DOMUtils = (function () {
1077
1246
  val(element, value) {
1078
1247
  let DOMUtilsContext = this;
1079
1248
  if (typeof element === "string") {
1080
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1249
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1081
1250
  }
1082
1251
  if (element == null) {
1083
1252
  return;
1084
1253
  }
1254
+ if (isNodeList(element)) {
1255
+ if (value == null) {
1256
+ // 获取
1257
+ return DOMUtilsContext.val(element[0]);
1258
+ }
1259
+ else {
1260
+ // 设置
1261
+ element.forEach(($ele) => {
1262
+ DOMUtilsContext.val($ele, value);
1263
+ });
1264
+ }
1265
+ return;
1266
+ }
1085
1267
  if (value == null) {
1268
+ // 获取
1086
1269
  if (element.localName === "input" &&
1087
1270
  (element.type === "checkbox" || element.type === "radio")) {
1088
1271
  return element.checked;
@@ -1092,6 +1275,7 @@ var DOMUtils = (function () {
1092
1275
  }
1093
1276
  }
1094
1277
  else {
1278
+ // 设置
1095
1279
  if (element.localName === "input" &&
1096
1280
  (element.type === "checkbox" || element.type === "radio")) {
1097
1281
  element.checked = !!value;
@@ -1103,17 +1287,30 @@ var DOMUtils = (function () {
1103
1287
  }
1104
1288
  prop(element, propName, propValue) {
1105
1289
  let DOMUtilsContext = this;
1290
+ if (typeof element === "string") {
1291
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1292
+ }
1106
1293
  if (element == null) {
1107
1294
  return;
1108
1295
  }
1109
- if (typeof element === "string") {
1110
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1296
+ if (isNodeList(element)) {
1297
+ if (propValue == null) {
1298
+ // 获取
1299
+ return DOMUtilsContext.prop(element[0], propName);
1300
+ }
1301
+ else {
1302
+ // 设置
1303
+ element.forEach(($ele) => {
1304
+ DOMUtilsContext.prop($ele, propName, propValue);
1305
+ });
1306
+ }
1307
+ return;
1111
1308
  }
1112
1309
  if (propValue == null) {
1113
- return element[propName];
1310
+ return Reflect.get(element, propName);
1114
1311
  }
1115
1312
  else {
1116
- element[propName] = propValue;
1313
+ Reflect.set(element, propName, propValue);
1117
1314
  }
1118
1315
  }
1119
1316
  /**
@@ -1128,11 +1325,18 @@ var DOMUtils = (function () {
1128
1325
  removeAttr(element, attrName) {
1129
1326
  let DOMUtilsContext = this;
1130
1327
  if (typeof element === "string") {
1131
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1328
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1132
1329
  }
1133
1330
  if (element == null) {
1134
1331
  return;
1135
1332
  }
1333
+ if (isNodeList(element)) {
1334
+ // 设置
1335
+ element.forEach(($ele) => {
1336
+ DOMUtilsContext.removeAttr($ele, attrName);
1337
+ });
1338
+ return;
1339
+ }
1136
1340
  element.removeAttribute(attrName);
1137
1341
  }
1138
1342
  /**
@@ -1147,15 +1351,30 @@ var DOMUtils = (function () {
1147
1351
  removeClass(element, className) {
1148
1352
  let DOMUtilsContext = this;
1149
1353
  if (typeof element === "string") {
1150
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1354
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1151
1355
  }
1152
1356
  if (element == null) {
1153
1357
  return;
1154
1358
  }
1155
- if (className == null) {
1359
+ if (isNodeList(element)) {
1360
+ // 设置
1361
+ element.forEach(($ele) => {
1362
+ DOMUtilsContext.removeClass($ele, className);
1363
+ });
1156
1364
  return;
1157
1365
  }
1158
- element.classList.remove(className);
1366
+ if (className == null) {
1367
+ // 清空全部className
1368
+ element.className = "";
1369
+ }
1370
+ else {
1371
+ if (!Array.isArray(className)) {
1372
+ className = className.split(" ");
1373
+ }
1374
+ className.forEach((itemClassName) => {
1375
+ element.classList.remove(itemClassName);
1376
+ });
1377
+ }
1159
1378
  }
1160
1379
  /**
1161
1380
  * 移除元素的属性
@@ -1169,11 +1388,18 @@ var DOMUtils = (function () {
1169
1388
  removeProp(element, propName) {
1170
1389
  let DOMUtilsContext = this;
1171
1390
  if (typeof element === "string") {
1172
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1391
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1173
1392
  }
1174
1393
  if (element == null) {
1175
1394
  return;
1176
1395
  }
1396
+ if (isNodeList(element)) {
1397
+ // 设置
1398
+ element.forEach(($ele) => {
1399
+ DOMUtilsContext.removeProp($ele, propName);
1400
+ });
1401
+ return;
1402
+ }
1177
1403
  DOMUtilsCommonUtils.delete(element, propName);
1178
1404
  }
1179
1405
  /**
@@ -1188,22 +1414,22 @@ var DOMUtils = (function () {
1188
1414
  replaceWith(element, newElement) {
1189
1415
  let DOMUtilsContext = this;
1190
1416
  if (typeof element === "string") {
1191
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1417
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1192
1418
  }
1193
1419
  if (element == null) {
1194
1420
  return;
1195
1421
  }
1196
- if (typeof newElement === "string") {
1197
- newElement = DOMUtilsContext.parseHTML(newElement, false, false);
1198
- }
1199
- if (element instanceof NodeList || element instanceof Array) {
1200
- element.forEach((item) => {
1201
- DOMUtilsContext.replaceWith(item, newElement);
1422
+ if (isNodeList(element)) {
1423
+ // 设置
1424
+ element.forEach(($ele) => {
1425
+ DOMUtilsContext.replaceWith($ele, newElement);
1202
1426
  });
1427
+ return;
1203
1428
  }
1204
- else {
1205
- element.parentElement.replaceChild(newElement, element);
1429
+ if (typeof newElement === "string") {
1430
+ newElement = DOMUtilsContext.parseHTML(newElement, false, false);
1206
1431
  }
1432
+ element.parentElement.replaceChild(newElement, element);
1207
1433
  }
1208
1434
  /**
1209
1435
  * 给元素添加class
@@ -1217,12 +1443,27 @@ var DOMUtils = (function () {
1217
1443
  addClass(element, className) {
1218
1444
  let DOMUtilsContext = this;
1219
1445
  if (typeof element === "string") {
1220
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1446
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1221
1447
  }
1222
1448
  if (element == null) {
1223
1449
  return;
1224
1450
  }
1225
- element.classList.add(className);
1451
+ if (isNodeList(element)) {
1452
+ // 设置
1453
+ element.forEach(($ele) => {
1454
+ DOMUtilsContext.addClass($ele, className);
1455
+ });
1456
+ return;
1457
+ }
1458
+ if (!Array.isArray(className)) {
1459
+ className = className.split(" ");
1460
+ }
1461
+ className.forEach((itemClassName) => {
1462
+ if (itemClassName.trim() == "") {
1463
+ return;
1464
+ }
1465
+ element.classList.add(itemClassName);
1466
+ });
1226
1467
  }
1227
1468
  /**
1228
1469
  * 函数在元素内部末尾添加子元素或HTML字符串
@@ -1236,11 +1477,18 @@ var DOMUtils = (function () {
1236
1477
  append(element, content) {
1237
1478
  let DOMUtilsContext = this;
1238
1479
  if (typeof element === "string") {
1239
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1480
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1240
1481
  }
1241
1482
  if (element == null) {
1242
1483
  return;
1243
1484
  }
1485
+ if (isNodeList(element)) {
1486
+ // 设置
1487
+ element.forEach(($ele) => {
1488
+ DOMUtilsContext.append($ele, content);
1489
+ });
1490
+ return;
1491
+ }
1244
1492
  function elementAppendChild(ele, text) {
1245
1493
  if (typeof content === "string") {
1246
1494
  ele.insertAdjacentHTML("beforeend", text);
@@ -1254,7 +1502,7 @@ var DOMUtils = (function () {
1254
1502
  let fragment = DOMUtilsContext.windowApi.document.createDocumentFragment();
1255
1503
  content.forEach((ele) => {
1256
1504
  if (typeof ele === "string") {
1257
- ele = this.parseHTML(ele, true, false);
1505
+ ele = DOMUtilsContext.parseHTML(ele, true, false);
1258
1506
  }
1259
1507
  fragment.appendChild(ele);
1260
1508
  });
@@ -1276,11 +1524,18 @@ var DOMUtils = (function () {
1276
1524
  prepend(element, content) {
1277
1525
  let DOMUtilsContext = this;
1278
1526
  if (typeof element === "string") {
1279
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1527
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1280
1528
  }
1281
1529
  if (element == null) {
1282
1530
  return;
1283
1531
  }
1532
+ if (isNodeList(element)) {
1533
+ // 设置
1534
+ element.forEach(($ele) => {
1535
+ DOMUtilsContext.prepend($ele, content);
1536
+ });
1537
+ return;
1538
+ }
1284
1539
  if (typeof content === "string") {
1285
1540
  element.insertAdjacentHTML("afterbegin", content);
1286
1541
  }
@@ -1306,11 +1561,18 @@ var DOMUtils = (function () {
1306
1561
  after(element, content) {
1307
1562
  let DOMUtilsContext = this;
1308
1563
  if (typeof element === "string") {
1309
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1564
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1310
1565
  }
1311
1566
  if (element == null) {
1312
1567
  return;
1313
1568
  }
1569
+ if (isNodeList(element)) {
1570
+ // 设置
1571
+ element.forEach(($ele) => {
1572
+ DOMUtilsContext.after($ele, content);
1573
+ });
1574
+ return;
1575
+ }
1314
1576
  if (typeof content === "string") {
1315
1577
  element.insertAdjacentHTML("afterend", content);
1316
1578
  }
@@ -1338,11 +1600,18 @@ var DOMUtils = (function () {
1338
1600
  before(element, content) {
1339
1601
  let DOMUtilsContext = this;
1340
1602
  if (typeof element === "string") {
1341
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1603
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1342
1604
  }
1343
1605
  if (element == null) {
1344
1606
  return;
1345
1607
  }
1608
+ if (isNodeList(element)) {
1609
+ // 设置
1610
+ element.forEach(($ele) => {
1611
+ DOMUtilsContext.before($ele, content);
1612
+ });
1613
+ return;
1614
+ }
1346
1615
  if (typeof content === "string") {
1347
1616
  element.insertAdjacentHTML("beforebegin", content);
1348
1617
  }
@@ -1358,30 +1627,28 @@ var DOMUtils = (function () {
1358
1627
  }
1359
1628
  /**
1360
1629
  * 移除元素
1361
- * @param target 目标元素
1630
+ * @param element 目标元素
1362
1631
  * @example
1363
1632
  * // 元素a.xx前面添加一个元素
1364
1633
  * DOMUtils.remove(document.querySelector("a.xx"))
1365
1634
  * DOMUtils.remove(document.querySelectorAll("a.xx"))
1366
1635
  * DOMUtils.remove("a.xx")
1367
1636
  * */
1368
- remove(target) {
1637
+ remove(element) {
1369
1638
  let DOMUtilsContext = this;
1370
- if (typeof target === "string") {
1371
- target = DOMUtilsContext.windowApi.document.querySelectorAll(target);
1639
+ if (typeof element === "string") {
1640
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1372
1641
  }
1373
- if (target == null) {
1642
+ if (element == null) {
1374
1643
  return;
1375
1644
  }
1376
- if (target instanceof NodeList || target instanceof Array) {
1377
- target = target;
1378
- for (const element of target) {
1379
- DOMUtilsContext.remove(element);
1380
- }
1381
- }
1382
- else {
1383
- target.remove();
1645
+ if (isNodeList(element)) {
1646
+ element.forEach(($ele) => {
1647
+ DOMUtilsContext.remove($ele);
1648
+ });
1649
+ return;
1384
1650
  }
1651
+ element.remove();
1385
1652
  }
1386
1653
  /**
1387
1654
  * 移除元素的所有子元素
@@ -1394,11 +1661,18 @@ var DOMUtils = (function () {
1394
1661
  empty(element) {
1395
1662
  let DOMUtilsContext = this;
1396
1663
  if (typeof element === "string") {
1397
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1664
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1398
1665
  }
1399
1666
  if (element == null) {
1400
1667
  return;
1401
1668
  }
1669
+ if (isNodeList(element)) {
1670
+ // 设置
1671
+ element.forEach(($ele) => {
1672
+ DOMUtilsContext.empty($ele);
1673
+ });
1674
+ return;
1675
+ }
1402
1676
  element.innerHTML = "";
1403
1677
  }
1404
1678
  /**
@@ -1429,7 +1703,8 @@ var DOMUtils = (function () {
1429
1703
  width(element, isShow = false) {
1430
1704
  let DOMUtilsContext = this;
1431
1705
  if (typeof element === "string") {
1432
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1706
+ element =
1707
+ DOMUtilsContext.windowApi.document.querySelector(element);
1433
1708
  }
1434
1709
  if (element == null) {
1435
1710
  return;
@@ -1541,7 +1816,7 @@ var DOMUtils = (function () {
1541
1816
  }
1542
1817
  element = element;
1543
1818
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1544
- let style = getComputedStyle(element, null);
1819
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element, null);
1545
1820
  let marginLeft = DOMUtilsCommonUtils.getStyleValue(style, "marginLeft");
1546
1821
  let marginRight = DOMUtilsCommonUtils.getStyleValue(style, "marginRight");
1547
1822
  return element.offsetWidth + marginLeft + marginRight;
@@ -1567,7 +1842,7 @@ var DOMUtils = (function () {
1567
1842
  }
1568
1843
  element = element;
1569
1844
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1570
- let style = getComputedStyle(element, null);
1845
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(element, null);
1571
1846
  let marginTop = DOMUtilsCommonUtils.getStyleValue(style, "marginTop");
1572
1847
  let marginBottom = DOMUtilsCommonUtils.getStyleValue(style, "marginBottom");
1573
1848
  return element.offsetHeight + marginTop + marginBottom;
@@ -1594,11 +1869,18 @@ var DOMUtils = (function () {
1594
1869
  animate(element, styles, duration = 1000, callback = null) {
1595
1870
  let DOMUtilsContext = this;
1596
1871
  if (typeof element === "string") {
1597
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1872
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1598
1873
  }
1599
1874
  if (element == null) {
1600
1875
  return;
1601
1876
  }
1877
+ if (isNodeList(element)) {
1878
+ // 设置
1879
+ element.forEach(($ele) => {
1880
+ DOMUtilsContext.animate($ele, styles, duration, callback);
1881
+ });
1882
+ return;
1883
+ }
1602
1884
  if (typeof duration !== "number" || duration <= 0) {
1603
1885
  throw new TypeError("duration must be a positive number");
1604
1886
  }
@@ -1615,7 +1897,9 @@ var DOMUtils = (function () {
1615
1897
  let from = {};
1616
1898
  let to = {};
1617
1899
  for (let prop in styles) {
1618
- from[prop] = element.style[prop] || getComputedStyle(element)[prop];
1900
+ from[prop] =
1901
+ element.style[prop] ||
1902
+ DOMUtilsContext.windowApi.globalThis.getComputedStyle(element)[prop];
1619
1903
  to[prop] = styles[prop];
1620
1904
  }
1621
1905
  let timer = setInterval(function () {
@@ -1647,18 +1931,26 @@ var DOMUtils = (function () {
1647
1931
  wrap(element, wrapperHTML) {
1648
1932
  let DOMUtilsContext = this;
1649
1933
  if (typeof element === "string") {
1650
- element = DOMUtilsContext.windowApi.document.querySelector(element);
1934
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1651
1935
  }
1652
1936
  if (element == null) {
1653
1937
  return;
1654
1938
  }
1939
+ if (isNodeList(element)) {
1940
+ // 设置
1941
+ element.forEach(($ele) => {
1942
+ DOMUtilsContext.wrap($ele, wrapperHTML);
1943
+ });
1944
+ return;
1945
+ }
1655
1946
  element = element;
1656
1947
  // 创建一个新的div元素,并将wrapperHTML作为其innerHTML
1657
1948
  let wrapper = DOMUtilsContext.windowApi.document.createElement("div");
1658
1949
  wrapper.innerHTML = wrapperHTML;
1659
1950
  let wrapperFirstChild = wrapper.firstChild;
1660
1951
  // 将要包裹的元素插入目标元素前面
1661
- element.parentElement.insertBefore(wrapperFirstChild, element);
1952
+ let parentElement = element.parentElement;
1953
+ parentElement.insertBefore(wrapperFirstChild, element);
1662
1954
  // 将要包裹的元素移动到wrapper中
1663
1955
  wrapperFirstChild.appendChild(element);
1664
1956
  }
@@ -1738,6 +2030,8 @@ var DOMUtils = (function () {
1738
2030
  }
1739
2031
  parseHTML(html, useParser = false, isComplete = false) {
1740
2032
  let DOMUtilsContext = this;
2033
+ // 去除html前后的空格
2034
+ html = html.trim();
1741
2035
  function parseHTMLByDOMParser() {
1742
2036
  let parser = new DOMParser();
1743
2037
  if (isComplete) {
@@ -1764,16 +2058,61 @@ var DOMUtils = (function () {
1764
2058
  return parseHTMLByCreateDom();
1765
2059
  }
1766
2060
  }
2061
+ /**
2062
+ * 序列化表单元素
2063
+ * @param $form 表单元素
2064
+ * @example
2065
+ * DOMUtils.serialize(document.querySelector("form"))
2066
+ * > xxx=xxx&aaa=
2067
+ */
2068
+ serialize($form) {
2069
+ const elements = $form.elements;
2070
+ let serializedArray = [];
2071
+ for (let i = 0; i < elements.length; i++) {
2072
+ const element = elements[i];
2073
+ if (element.name &&
2074
+ !element.disabled &&
2075
+ (element.checked ||
2076
+ [
2077
+ "text",
2078
+ "hidden",
2079
+ "password",
2080
+ "textarea",
2081
+ "select-one",
2082
+ "select-multiple",
2083
+ ].includes(element.type))) {
2084
+ if (element.type === "select-multiple") {
2085
+ for (let j = 0; j < element.options.length; j++) {
2086
+ if (element.options[j].selected) {
2087
+ serializedArray.push({
2088
+ name: element.name,
2089
+ value: element.options[j].value,
2090
+ });
2091
+ }
2092
+ }
2093
+ }
2094
+ else {
2095
+ serializedArray.push({ name: element.name, value: element.value });
2096
+ }
2097
+ }
2098
+ }
2099
+ return serializedArray
2100
+ .map((item) => `${encodeURIComponent(item.name)}=${encodeURIComponent(item.value)}`)
2101
+ .join("&");
2102
+ }
1767
2103
  /**
1768
2104
  * 显示元素
1769
2105
  * @param target 当前元素
2106
+ * @param checkVisiblie 是否检测元素是否显示
2107
+ * + true (默认)如果检测到还未显示,则强制使用display: unset !important;
2108
+ * + false 不检测,直接设置display属性为空
1770
2109
  * @example
1771
2110
  * // 显示a.xx元素
1772
2111
  * DOMUtils.show(document.querySelector("a.xx"))
1773
2112
  * DOMUtils.show(document.querySelectorAll("a.xx"))
1774
2113
  * DOMUtils.show("a.xx")
1775
2114
  */
1776
- show(target) {
2115
+ show(target, checkVisiblie = true) {
1777
2116
  let DOMUtilsContext = this;
1778
2117
  if (target == null) {
1779
2118
  return;
@@ -1784,28 +2123,33 @@ var DOMUtils = (function () {
1784
2123
  if (target instanceof NodeList || target instanceof Array) {
1785
2124
  target = target;
1786
2125
  for (const element of target) {
1787
- DOMUtilsContext.show(element);
2126
+ DOMUtilsContext.show(element, checkVisiblie);
1788
2127
  }
1789
2128
  }
1790
2129
  else {
1791
2130
  target = target;
1792
2131
  target.style.display = "";
1793
- if (!DOMUtilsCommonUtils.isShow(target)) {
1794
- /* 仍然是不显示,尝试使用强覆盖 */
1795
- target.style.setProperty("display", "unset", "important");
2132
+ if (checkVisiblie) {
2133
+ if (!DOMUtilsCommonUtils.isShow(target)) {
2134
+ /* 仍然是不显示,尝试使用强覆盖 */
2135
+ target.style.setProperty("display", "unset", "important");
2136
+ }
1796
2137
  }
1797
2138
  }
1798
2139
  }
1799
2140
  /**
1800
2141
  * 隐藏元素
1801
2142
  * @param target 当前元素
2143
+ * @param checkVisiblie 是否检测元素是否显示
2144
+ * + true (默认)如果检测到显示,则强制使用display: none !important;
2145
+ * + false 不检测,直接设置display属性为none
1802
2146
  * @example
1803
2147
  * // 隐藏a.xx元素
1804
2148
  * DOMUtils.hide(document.querySelector("a.xx"))
1805
2149
  * DOMUtils.hide(document.querySelectorAll("a.xx"))
1806
2150
  * DOMUtils.hide("a.xx")
1807
2151
  */
1808
- hide(target) {
2152
+ hide(target, checkVisiblie = true) {
1809
2153
  let DOMUtilsContext = this;
1810
2154
  if (target == null) {
1811
2155
  return;
@@ -1816,15 +2160,17 @@ var DOMUtils = (function () {
1816
2160
  if (target instanceof NodeList || target instanceof Array) {
1817
2161
  target = target;
1818
2162
  for (const element of target) {
1819
- DOMUtilsContext.hide(element);
2163
+ DOMUtilsContext.hide(element, checkVisiblie);
1820
2164
  }
1821
2165
  }
1822
2166
  else {
1823
2167
  target = target;
1824
2168
  target.style.display = "none";
1825
- if (DOMUtilsCommonUtils.isShow(target)) {
1826
- /* 仍然是显示,尝试使用强覆盖 */
1827
- target.style.setProperty("display", "none", "important");
2169
+ if (checkVisiblie) {
2170
+ if (DOMUtilsCommonUtils.isShow(target)) {
2171
+ /* 仍然是显示,尝试使用强覆盖 */
2172
+ target.style.setProperty("display", "none", "important");
2173
+ }
1828
2174
  }
1829
2175
  }
1830
2176
  }
@@ -1848,9 +2194,15 @@ var DOMUtils = (function () {
1848
2194
  }
1849
2195
  let DOMUtilsContext = this;
1850
2196
  if (typeof element === "string") {
1851
- element = DOMUtilsContext.windowApi.document.querySelector(element);
2197
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
2198
+ }
2199
+ if (isNodeList(element)) {
2200
+ // 设置
2201
+ element.forEach(($ele) => {
2202
+ DOMUtilsContext.fadeIn($ele, duration, callback);
2203
+ });
2204
+ return;
1852
2205
  }
1853
- element = element;
1854
2206
  element.style.opacity = "0";
1855
2207
  element.style.display = "";
1856
2208
  let start = null;
@@ -1893,9 +2245,15 @@ var DOMUtils = (function () {
1893
2245
  return;
1894
2246
  }
1895
2247
  if (typeof element === "string") {
1896
- element = DOMUtilsContext.windowApi.document.querySelector(element);
2248
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
2249
+ }
2250
+ if (isNodeList(element)) {
2251
+ // 设置
2252
+ element.forEach(($ele) => {
2253
+ DOMUtilsContext.fadeOut($ele, duration, callback);
2254
+ });
2255
+ return;
1897
2256
  }
1898
- element = element;
1899
2257
  element.style.opacity = "1";
1900
2258
  let start = null;
1901
2259
  let timer = null;
@@ -1921,24 +2279,34 @@ var DOMUtils = (function () {
1921
2279
  /**
1922
2280
  * 切换元素的显示和隐藏状态
1923
2281
  * @param element 当前元素
2282
+ * @param checkVisiblie 是否检测元素是否显示
1924
2283
  * @example
1925
2284
  * // 如果元素a.xx当前是隐藏,则显示,如果是显示,则隐藏
1926
2285
  * DOMUtils.toggle(document.querySelector("a.xx"))
1927
2286
  * DOMUtils.toggle("a.xx")
1928
2287
  */
1929
- toggle(element) {
2288
+ toggle(element, checkVisiblie) {
1930
2289
  let DOMUtilsContext = this;
1931
2290
  if (typeof element === "string") {
1932
- element = DOMUtilsContext.windowApi.document.querySelector(element);
2291
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1933
2292
  }
1934
2293
  if (element == null) {
1935
2294
  return;
1936
2295
  }
1937
- if (getComputedStyle(element).getPropertyValue("display") === "none") {
1938
- DOMUtilsContext.show(element);
2296
+ if (isNodeList(element)) {
2297
+ // 设置
2298
+ element.forEach(($ele) => {
2299
+ DOMUtilsContext.toggle($ele);
2300
+ });
2301
+ return;
2302
+ }
2303
+ if (DOMUtilsContext.windowApi.globalThis
2304
+ .getComputedStyle(element)
2305
+ .getPropertyValue("display") === "none") {
2306
+ DOMUtilsContext.show(element, checkVisiblie);
1939
2307
  }
1940
2308
  else {
1941
- DOMUtilsContext.hide(element);
2309
+ DOMUtilsContext.hide(element, checkVisiblie);
1942
2310
  }
1943
2311
  }
1944
2312
  /**