@whitesev/domutils 1.5.6 → 1.5.8

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
@@ -458,6 +458,13 @@ const DOMUtilsCommonUtils = {
458
458
  globalThis.clearInterval(timeId);
459
459
  }
460
460
  },
461
+ /**
462
+ * 判断是否是元素列表
463
+ * @param $ele
464
+ */
465
+ isNodeList($ele) {
466
+ return Array.isArray($ele) || $ele instanceof NodeList;
467
+ },
461
468
  };
462
469
 
463
470
  /* 数据 */
@@ -584,12 +591,12 @@ class DOMUtilsEvent {
584
591
  : elementItem;
585
592
  let findValue = selectorList.find((selectorItem) => {
586
593
  // 判断目标元素是否匹配选择器
587
- if (eventTarget?.matches(selectorItem)) {
594
+ if (DOMUtilsContext.matches(eventTarget, selectorItem)) {
588
595
  /* 当前目标可以被selector所匹配到 */
589
596
  return true;
590
597
  }
591
598
  /* 在上层与主元素之间寻找可以被selector所匹配到的 */
592
- let $closestMatches = eventTarget?.closest(selectorItem);
599
+ let $closestMatches = DOMUtilsContext.closest(eventTarget, selectorItem);
593
600
  if ($closestMatches && totalParent?.contains($closestMatches)) {
594
601
  eventTarget = $closestMatches;
595
602
  return true;
@@ -971,7 +978,7 @@ class DOMUtilsEvent {
971
978
  if (element == null) {
972
979
  return;
973
980
  }
974
- if (isNodeList(element)) {
981
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
975
982
  // 设置
976
983
  element.forEach(($ele) => {
977
984
  DOMUtilsContext.click($ele, handler, details, useDispatchToTriggerEvent);
@@ -1007,7 +1014,7 @@ class DOMUtilsEvent {
1007
1014
  if (element == null) {
1008
1015
  return;
1009
1016
  }
1010
- if (isNodeList(element)) {
1017
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1011
1018
  // 设置
1012
1019
  element.forEach(($ele) => {
1013
1020
  DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
@@ -1043,7 +1050,7 @@ class DOMUtilsEvent {
1043
1050
  if (element == null) {
1044
1051
  return;
1045
1052
  }
1046
- if (isNodeList(element)) {
1053
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1047
1054
  // 设置
1048
1055
  element.forEach(($ele) => {
1049
1056
  DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
@@ -1079,7 +1086,7 @@ class DOMUtilsEvent {
1079
1086
  if (element == null) {
1080
1087
  return;
1081
1088
  }
1082
- if (isNodeList(element)) {
1089
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1083
1090
  // 设置
1084
1091
  element.forEach(($ele) => {
1085
1092
  DOMUtilsContext.hover($ele, handler, option);
@@ -1112,7 +1119,7 @@ class DOMUtilsEvent {
1112
1119
  if (typeof element === "string") {
1113
1120
  element = DOMUtilsContext.selectorAll(element);
1114
1121
  }
1115
- if (isNodeList(element)) {
1122
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1116
1123
  // 设置
1117
1124
  element.forEach(($ele) => {
1118
1125
  DOMUtilsContext.keyup($ele, handler, option);
@@ -1144,7 +1151,7 @@ class DOMUtilsEvent {
1144
1151
  if (typeof element === "string") {
1145
1152
  element = DOMUtilsContext.selectorAll(element);
1146
1153
  }
1147
- if (isNodeList(element)) {
1154
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1148
1155
  // 设置
1149
1156
  element.forEach(($ele) => {
1150
1157
  DOMUtilsContext.keydown($ele, handler, option);
@@ -1176,7 +1183,7 @@ class DOMUtilsEvent {
1176
1183
  if (typeof element === "string") {
1177
1184
  element = DOMUtilsContext.selectorAll(element);
1178
1185
  }
1179
- if (isNodeList(element)) {
1186
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1180
1187
  // 设置
1181
1188
  element.forEach(($ele) => {
1182
1189
  DOMUtilsContext.keypress($ele, handler, option);
@@ -1330,21 +1337,139 @@ class DOMUtilsEvent {
1330
1337
  return Array.from(context.windowApi.document.querySelectorAll(selector));
1331
1338
  }
1332
1339
  }
1340
+ /**
1341
+ * 匹配元素,可使用以下的额外语法
1342
+ *
1343
+ * + :contains([text]) 作用: 找到包含指定文本内容的指定元素
1344
+ * + :empty 作用:找到既没有文本内容也没有子元素的指定元素
1345
+ * + :regexp([text]) 作用: 找到符合正则表达式的内容的指定元素
1346
+ * @param $el 元素
1347
+ * @param selector 选择器
1348
+ * @example
1349
+ * DOMUtils.matches("div:contains('测试')")
1350
+ * > true
1351
+ * @example
1352
+ * DOMUtils.matches("div:empty")
1353
+ * > true
1354
+ * @example
1355
+ * DOMUtils.matches("div:regexp('^xxxx$')")
1356
+ * > true
1357
+ * @example
1358
+ * DOMUtils.matches("div:regexp(/^xxx/ig)")
1359
+ * > false
1360
+ */
1361
+ matches($el, selector) {
1362
+ selector = selector.trim();
1363
+ if ($el == null) {
1364
+ return false;
1365
+ }
1366
+ if (selector.match(/[^\s]{1}:empty$/gi)) {
1367
+ // empty 语法
1368
+ selector = selector.replace(/:empty$/gi, "");
1369
+ return $el.matches(selector) && $el?.innerHTML?.trim() === "";
1370
+ }
1371
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
1372
+ selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
1373
+ // contains 语法
1374
+ let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
1375
+ let text = textMatch[2];
1376
+ selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
1377
+ // @ts-ignore
1378
+ let content = $el?.textContent || $el?.innerText;
1379
+ if (typeof content !== "string") {
1380
+ content = "";
1381
+ }
1382
+ return $el.matches(selector) && content?.includes(text);
1383
+ }
1384
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
1385
+ selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
1386
+ // regexp 语法
1387
+ let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
1388
+ let pattern = textMatch[2];
1389
+ let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
1390
+ let flags = "";
1391
+ if (flagMatch) {
1392
+ pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
1393
+ flags = flagMatch[3];
1394
+ }
1395
+ let regexp = new RegExp(pattern, flags);
1396
+ selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
1397
+ // @ts-ignore
1398
+ let content = $el?.textContent || $el?.innerText;
1399
+ if (typeof content !== "string") {
1400
+ content = "";
1401
+ }
1402
+ return $el.matches(selector) && Boolean(content?.match(regexp));
1403
+ }
1404
+ else {
1405
+ // 普通语法
1406
+ return $el.matches(selector);
1407
+ }
1408
+ }
1409
+ closest($el, selector) {
1410
+ selector = selector.trim();
1411
+ if (selector.match(/[^\s]{1}:empty$/gi)) {
1412
+ // empty 语法
1413
+ selector = selector.replace(/:empty$/gi, "");
1414
+ let $closest = $el?.closest(selector);
1415
+ if ($closest && $closest?.innerHTML?.trim() === "") {
1416
+ return $closest;
1417
+ }
1418
+ return null;
1419
+ }
1420
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
1421
+ selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
1422
+ // contains 语法
1423
+ let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
1424
+ let text = textMatch[2];
1425
+ selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
1426
+ let $closest = $el?.closest(selector);
1427
+ if ($closest) {
1428
+ // @ts-ignore
1429
+ let content = $el?.textContent || $el?.innerText;
1430
+ if (typeof content === "string" && content.includes(text)) {
1431
+ return $closest;
1432
+ }
1433
+ }
1434
+ return null;
1435
+ }
1436
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
1437
+ selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
1438
+ // regexp 语法
1439
+ let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
1440
+ let pattern = textMatch[2];
1441
+ let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
1442
+ let flags = "";
1443
+ if (flagMatch) {
1444
+ pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
1445
+ flags = flagMatch[3];
1446
+ }
1447
+ let regexp = new RegExp(pattern, flags);
1448
+ selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
1449
+ let $closest = $el?.closest(selector);
1450
+ if ($closest) {
1451
+ // @ts-ignore
1452
+ let content = $el?.textContent || $el?.innerText;
1453
+ if (typeof content === "string" && content.match(regexp)) {
1454
+ return $closest;
1455
+ }
1456
+ }
1457
+ return null;
1458
+ }
1459
+ else {
1460
+ // 普通语法
1461
+ let $closest = $el?.closest(selector);
1462
+ return $closest;
1463
+ }
1464
+ }
1333
1465
  }
1334
1466
 
1335
- /**
1336
- * 判断是否是元素列表
1337
- * @param $ele
1338
- */
1339
- const isNodeList = ($ele) => {
1340
- return Array.isArray($ele) || $ele instanceof NodeList;
1341
- };
1342
1467
  class DOMUtils extends DOMUtilsEvent {
1343
1468
  constructor(option) {
1344
1469
  super(option);
1345
1470
  }
1346
1471
  /** 版本号 */
1347
- version = "2025.5.26";
1472
+ version = "2025.5.30";
1348
1473
  attr(element, attrName, attrValue) {
1349
1474
  let DOMUtilsContext = this;
1350
1475
  if (typeof element === "string") {
@@ -1353,7 +1478,7 @@ class DOMUtils extends DOMUtilsEvent {
1353
1478
  if (element == null) {
1354
1479
  return;
1355
1480
  }
1356
- if (isNodeList(element)) {
1481
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1357
1482
  if (attrValue == null) {
1358
1483
  // 获取属性
1359
1484
  return DOMUtilsContext.attr(element[0], attrName, attrValue);
@@ -1463,7 +1588,7 @@ class DOMUtils extends DOMUtilsEvent {
1463
1588
  if (element == null) {
1464
1589
  return;
1465
1590
  }
1466
- if (isNodeList(element)) {
1591
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1467
1592
  if (typeof property === "string") {
1468
1593
  if (value == null) {
1469
1594
  // 获取属性
@@ -1530,7 +1655,7 @@ class DOMUtils extends DOMUtilsEvent {
1530
1655
  if (element == null) {
1531
1656
  return;
1532
1657
  }
1533
- if (isNodeList(element)) {
1658
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1534
1659
  if (text == null) {
1535
1660
  // 获取
1536
1661
  return DOMUtilsContext.text(element[0]);
@@ -1566,7 +1691,7 @@ class DOMUtils extends DOMUtilsEvent {
1566
1691
  if (element == null) {
1567
1692
  return;
1568
1693
  }
1569
- if (isNodeList(element)) {
1694
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1570
1695
  if (html == null) {
1571
1696
  // 获取
1572
1697
  return DOMUtilsContext.html(element[0]);
@@ -1636,7 +1761,7 @@ class DOMUtils extends DOMUtilsEvent {
1636
1761
  if (element == null) {
1637
1762
  return;
1638
1763
  }
1639
- if (isNodeList(element)) {
1764
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1640
1765
  if (value == null) {
1641
1766
  // 获取
1642
1767
  return DOMUtilsContext.val(element[0]);
@@ -1678,7 +1803,7 @@ class DOMUtils extends DOMUtilsEvent {
1678
1803
  if (element == null) {
1679
1804
  return;
1680
1805
  }
1681
- if (isNodeList(element)) {
1806
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1682
1807
  if (propValue == null) {
1683
1808
  // 获取
1684
1809
  return DOMUtilsContext.prop(element[0], propName);
@@ -1720,7 +1845,7 @@ class DOMUtils extends DOMUtilsEvent {
1720
1845
  if (element == null) {
1721
1846
  return;
1722
1847
  }
1723
- if (isNodeList(element)) {
1848
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1724
1849
  // 设置
1725
1850
  element.forEach(($ele) => {
1726
1851
  DOMUtilsContext.removeAttr($ele, attrName);
@@ -1746,7 +1871,7 @@ class DOMUtils extends DOMUtilsEvent {
1746
1871
  if (element == null) {
1747
1872
  return;
1748
1873
  }
1749
- if (isNodeList(element)) {
1874
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1750
1875
  // 设置
1751
1876
  element.forEach(($ele) => {
1752
1877
  DOMUtilsContext.removeClass($ele, className);
@@ -1783,7 +1908,7 @@ class DOMUtils extends DOMUtilsEvent {
1783
1908
  if (element == null) {
1784
1909
  return;
1785
1910
  }
1786
- if (isNodeList(element)) {
1911
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1787
1912
  // 设置
1788
1913
  element.forEach(($ele) => {
1789
1914
  DOMUtilsContext.removeProp($ele, propName);
@@ -1809,7 +1934,7 @@ class DOMUtils extends DOMUtilsEvent {
1809
1934
  if (element == null) {
1810
1935
  return;
1811
1936
  }
1812
- if (isNodeList(element)) {
1937
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1813
1938
  // 设置
1814
1939
  element.forEach(($ele) => {
1815
1940
  DOMUtilsContext.replaceWith($ele, newElement);
@@ -1838,7 +1963,7 @@ class DOMUtils extends DOMUtilsEvent {
1838
1963
  if (element == null) {
1839
1964
  return;
1840
1965
  }
1841
- if (isNodeList(element)) {
1966
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1842
1967
  // 设置
1843
1968
  element.forEach(($ele) => {
1844
1969
  DOMUtilsContext.addClass($ele, className);
@@ -1868,7 +1993,7 @@ class DOMUtils extends DOMUtilsEvent {
1868
1993
  if (element == null) {
1869
1994
  return false;
1870
1995
  }
1871
- if (isNodeList(element)) {
1996
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1872
1997
  let flag = true;
1873
1998
  for (let index = 0; index < element.length; index++) {
1874
1999
  const $ele = element[index];
@@ -1907,7 +2032,7 @@ class DOMUtils extends DOMUtilsEvent {
1907
2032
  if (element == null) {
1908
2033
  return;
1909
2034
  }
1910
- if (isNodeList(element)) {
2035
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1911
2036
  // 设置
1912
2037
  element.forEach(($ele) => {
1913
2038
  DOMUtilsContext.append($ele, content);
@@ -1954,7 +2079,7 @@ class DOMUtils extends DOMUtilsEvent {
1954
2079
  if (element == null) {
1955
2080
  return;
1956
2081
  }
1957
- if (isNodeList(element)) {
2082
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1958
2083
  // 设置
1959
2084
  element.forEach(($ele) => {
1960
2085
  DOMUtilsContext.prepend($ele, content);
@@ -1991,7 +2116,7 @@ class DOMUtils extends DOMUtilsEvent {
1991
2116
  if (element == null) {
1992
2117
  return;
1993
2118
  }
1994
- if (isNodeList(element)) {
2119
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1995
2120
  // 设置
1996
2121
  element.forEach(($ele) => {
1997
2122
  DOMUtilsContext.after($ele, content);
@@ -2030,7 +2155,7 @@ class DOMUtils extends DOMUtilsEvent {
2030
2155
  if (element == null) {
2031
2156
  return;
2032
2157
  }
2033
- if (isNodeList(element)) {
2158
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2034
2159
  // 设置
2035
2160
  element.forEach(($ele) => {
2036
2161
  DOMUtilsContext.before($ele, content);
@@ -2067,7 +2192,7 @@ class DOMUtils extends DOMUtilsEvent {
2067
2192
  if (element == null) {
2068
2193
  return;
2069
2194
  }
2070
- if (isNodeList(element)) {
2195
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2071
2196
  element.forEach(($ele) => {
2072
2197
  DOMUtilsContext.remove($ele);
2073
2198
  });
@@ -2091,7 +2216,7 @@ class DOMUtils extends DOMUtilsEvent {
2091
2216
  if (element == null) {
2092
2217
  return;
2093
2218
  }
2094
- if (isNodeList(element)) {
2219
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2095
2220
  // 设置
2096
2221
  element.forEach(($ele) => {
2097
2222
  DOMUtilsContext.empty($ele);
@@ -2298,7 +2423,7 @@ class DOMUtils extends DOMUtilsEvent {
2298
2423
  if (element == null) {
2299
2424
  return;
2300
2425
  }
2301
- if (isNodeList(element)) {
2426
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2302
2427
  // 设置
2303
2428
  element.forEach(($ele) => {
2304
2429
  DOMUtilsContext.animate($ele, styles, duration, callback);
@@ -2360,7 +2485,7 @@ class DOMUtils extends DOMUtilsEvent {
2360
2485
  if (element == null) {
2361
2486
  return;
2362
2487
  }
2363
- if (isNodeList(element)) {
2488
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2364
2489
  // 设置
2365
2490
  element.forEach(($ele) => {
2366
2491
  DOMUtilsContext.wrap($ele, wrapperHTML);
@@ -2440,7 +2565,7 @@ class DOMUtils extends DOMUtilsEvent {
2440
2565
  if (element == null) {
2441
2566
  return;
2442
2567
  }
2443
- if (isNodeList(element)) {
2568
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2444
2569
  let resultArray = [];
2445
2570
  element.forEach(($ele) => {
2446
2571
  resultArray.push(DOMUtilsContext.parent($ele));
@@ -2619,7 +2744,7 @@ class DOMUtils extends DOMUtilsEvent {
2619
2744
  if (typeof element === "string") {
2620
2745
  element = DOMUtilsContext.selectorAll(element);
2621
2746
  }
2622
- if (isNodeList(element)) {
2747
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2623
2748
  // 设置
2624
2749
  element.forEach(($ele) => {
2625
2750
  DOMUtilsContext.fadeIn($ele, duration, callback);
@@ -2670,7 +2795,7 @@ class DOMUtils extends DOMUtilsEvent {
2670
2795
  if (typeof element === "string") {
2671
2796
  element = DOMUtilsContext.selectorAll(element);
2672
2797
  }
2673
- if (isNodeList(element)) {
2798
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2674
2799
  // 设置
2675
2800
  element.forEach(($ele) => {
2676
2801
  DOMUtilsContext.fadeOut($ele, duration, callback);
@@ -2716,7 +2841,7 @@ class DOMUtils extends DOMUtilsEvent {
2716
2841
  if (element == null) {
2717
2842
  return;
2718
2843
  }
2719
- if (isNodeList(element)) {
2844
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2720
2845
  // 设置
2721
2846
  element.forEach(($ele) => {
2722
2847
  DOMUtilsContext.toggle($ele);