@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.umd.js CHANGED
@@ -464,6 +464,13 @@
464
464
  globalThis.clearInterval(timeId);
465
465
  }
466
466
  },
467
+ /**
468
+ * 判断是否是元素列表
469
+ * @param $ele
470
+ */
471
+ isNodeList($ele) {
472
+ return Array.isArray($ele) || $ele instanceof NodeList;
473
+ },
467
474
  };
468
475
 
469
476
  /* 数据 */
@@ -590,12 +597,12 @@
590
597
  : elementItem;
591
598
  let findValue = selectorList.find((selectorItem) => {
592
599
  // 判断目标元素是否匹配选择器
593
- if (eventTarget?.matches(selectorItem)) {
600
+ if (DOMUtilsContext.matches(eventTarget, selectorItem)) {
594
601
  /* 当前目标可以被selector所匹配到 */
595
602
  return true;
596
603
  }
597
604
  /* 在上层与主元素之间寻找可以被selector所匹配到的 */
598
- let $closestMatches = eventTarget?.closest(selectorItem);
605
+ let $closestMatches = DOMUtilsContext.closest(eventTarget, selectorItem);
599
606
  if ($closestMatches && totalParent?.contains($closestMatches)) {
600
607
  eventTarget = $closestMatches;
601
608
  return true;
@@ -977,7 +984,7 @@
977
984
  if (element == null) {
978
985
  return;
979
986
  }
980
- if (isNodeList(element)) {
987
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
981
988
  // 设置
982
989
  element.forEach(($ele) => {
983
990
  DOMUtilsContext.click($ele, handler, details, useDispatchToTriggerEvent);
@@ -1013,7 +1020,7 @@
1013
1020
  if (element == null) {
1014
1021
  return;
1015
1022
  }
1016
- if (isNodeList(element)) {
1023
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1017
1024
  // 设置
1018
1025
  element.forEach(($ele) => {
1019
1026
  DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
@@ -1049,7 +1056,7 @@
1049
1056
  if (element == null) {
1050
1057
  return;
1051
1058
  }
1052
- if (isNodeList(element)) {
1059
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1053
1060
  // 设置
1054
1061
  element.forEach(($ele) => {
1055
1062
  DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
@@ -1085,7 +1092,7 @@
1085
1092
  if (element == null) {
1086
1093
  return;
1087
1094
  }
1088
- if (isNodeList(element)) {
1095
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1089
1096
  // 设置
1090
1097
  element.forEach(($ele) => {
1091
1098
  DOMUtilsContext.hover($ele, handler, option);
@@ -1118,7 +1125,7 @@
1118
1125
  if (typeof element === "string") {
1119
1126
  element = DOMUtilsContext.selectorAll(element);
1120
1127
  }
1121
- if (isNodeList(element)) {
1128
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1122
1129
  // 设置
1123
1130
  element.forEach(($ele) => {
1124
1131
  DOMUtilsContext.keyup($ele, handler, option);
@@ -1150,7 +1157,7 @@
1150
1157
  if (typeof element === "string") {
1151
1158
  element = DOMUtilsContext.selectorAll(element);
1152
1159
  }
1153
- if (isNodeList(element)) {
1160
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1154
1161
  // 设置
1155
1162
  element.forEach(($ele) => {
1156
1163
  DOMUtilsContext.keydown($ele, handler, option);
@@ -1182,7 +1189,7 @@
1182
1189
  if (typeof element === "string") {
1183
1190
  element = DOMUtilsContext.selectorAll(element);
1184
1191
  }
1185
- if (isNodeList(element)) {
1192
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1186
1193
  // 设置
1187
1194
  element.forEach(($ele) => {
1188
1195
  DOMUtilsContext.keypress($ele, handler, option);
@@ -1336,21 +1343,139 @@
1336
1343
  return Array.from(context.windowApi.document.querySelectorAll(selector));
1337
1344
  }
1338
1345
  }
1346
+ /**
1347
+ * 匹配元素,可使用以下的额外语法
1348
+ *
1349
+ * + :contains([text]) 作用: 找到包含指定文本内容的指定元素
1350
+ * + :empty 作用:找到既没有文本内容也没有子元素的指定元素
1351
+ * + :regexp([text]) 作用: 找到符合正则表达式的内容的指定元素
1352
+ * @param $el 元素
1353
+ * @param selector 选择器
1354
+ * @example
1355
+ * DOMUtils.matches("div:contains('测试')")
1356
+ * > true
1357
+ * @example
1358
+ * DOMUtils.matches("div:empty")
1359
+ * > true
1360
+ * @example
1361
+ * DOMUtils.matches("div:regexp('^xxxx$')")
1362
+ * > true
1363
+ * @example
1364
+ * DOMUtils.matches("div:regexp(/^xxx/ig)")
1365
+ * > false
1366
+ */
1367
+ matches($el, selector) {
1368
+ selector = selector.trim();
1369
+ if ($el == null) {
1370
+ return false;
1371
+ }
1372
+ if (selector.match(/[^\s]{1}:empty$/gi)) {
1373
+ // empty 语法
1374
+ selector = selector.replace(/:empty$/gi, "");
1375
+ return $el.matches(selector) && $el?.innerHTML?.trim() === "";
1376
+ }
1377
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
1378
+ selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
1379
+ // contains 语法
1380
+ let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
1381
+ let text = textMatch[2];
1382
+ selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
1383
+ // @ts-ignore
1384
+ let content = $el?.textContent || $el?.innerText;
1385
+ if (typeof content !== "string") {
1386
+ content = "";
1387
+ }
1388
+ return $el.matches(selector) && content?.includes(text);
1389
+ }
1390
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
1391
+ selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
1392
+ // regexp 语法
1393
+ let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
1394
+ let pattern = textMatch[2];
1395
+ let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
1396
+ let flags = "";
1397
+ if (flagMatch) {
1398
+ pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
1399
+ flags = flagMatch[3];
1400
+ }
1401
+ let regexp = new RegExp(pattern, flags);
1402
+ selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
1403
+ // @ts-ignore
1404
+ let content = $el?.textContent || $el?.innerText;
1405
+ if (typeof content !== "string") {
1406
+ content = "";
1407
+ }
1408
+ return $el.matches(selector) && Boolean(content?.match(regexp));
1409
+ }
1410
+ else {
1411
+ // 普通语法
1412
+ return $el.matches(selector);
1413
+ }
1414
+ }
1415
+ closest($el, selector) {
1416
+ selector = selector.trim();
1417
+ if (selector.match(/[^\s]{1}:empty$/gi)) {
1418
+ // empty 语法
1419
+ selector = selector.replace(/:empty$/gi, "");
1420
+ let $closest = $el?.closest(selector);
1421
+ if ($closest && $closest?.innerHTML?.trim() === "") {
1422
+ return $closest;
1423
+ }
1424
+ return null;
1425
+ }
1426
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
1427
+ selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
1428
+ // contains 语法
1429
+ let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
1430
+ let text = textMatch[2];
1431
+ selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
1432
+ let $closest = $el?.closest(selector);
1433
+ if ($closest) {
1434
+ // @ts-ignore
1435
+ let content = $el?.textContent || $el?.innerText;
1436
+ if (typeof content === "string" && content.includes(text)) {
1437
+ return $closest;
1438
+ }
1439
+ }
1440
+ return null;
1441
+ }
1442
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
1443
+ selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
1444
+ // regexp 语法
1445
+ let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
1446
+ let pattern = textMatch[2];
1447
+ let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
1448
+ let flags = "";
1449
+ if (flagMatch) {
1450
+ pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
1451
+ flags = flagMatch[3];
1452
+ }
1453
+ let regexp = new RegExp(pattern, flags);
1454
+ selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
1455
+ let $closest = $el?.closest(selector);
1456
+ if ($closest) {
1457
+ // @ts-ignore
1458
+ let content = $el?.textContent || $el?.innerText;
1459
+ if (typeof content === "string" && content.match(regexp)) {
1460
+ return $closest;
1461
+ }
1462
+ }
1463
+ return null;
1464
+ }
1465
+ else {
1466
+ // 普通语法
1467
+ let $closest = $el?.closest(selector);
1468
+ return $closest;
1469
+ }
1470
+ }
1339
1471
  }
1340
1472
 
1341
- /**
1342
- * 判断是否是元素列表
1343
- * @param $ele
1344
- */
1345
- const isNodeList = ($ele) => {
1346
- return Array.isArray($ele) || $ele instanceof NodeList;
1347
- };
1348
1473
  class DOMUtils extends DOMUtilsEvent {
1349
1474
  constructor(option) {
1350
1475
  super(option);
1351
1476
  }
1352
1477
  /** 版本号 */
1353
- version = "2025.5.26";
1478
+ version = "2025.5.30";
1354
1479
  attr(element, attrName, attrValue) {
1355
1480
  let DOMUtilsContext = this;
1356
1481
  if (typeof element === "string") {
@@ -1359,7 +1484,7 @@
1359
1484
  if (element == null) {
1360
1485
  return;
1361
1486
  }
1362
- if (isNodeList(element)) {
1487
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1363
1488
  if (attrValue == null) {
1364
1489
  // 获取属性
1365
1490
  return DOMUtilsContext.attr(element[0], attrName, attrValue);
@@ -1469,7 +1594,7 @@
1469
1594
  if (element == null) {
1470
1595
  return;
1471
1596
  }
1472
- if (isNodeList(element)) {
1597
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1473
1598
  if (typeof property === "string") {
1474
1599
  if (value == null) {
1475
1600
  // 获取属性
@@ -1536,7 +1661,7 @@
1536
1661
  if (element == null) {
1537
1662
  return;
1538
1663
  }
1539
- if (isNodeList(element)) {
1664
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1540
1665
  if (text == null) {
1541
1666
  // 获取
1542
1667
  return DOMUtilsContext.text(element[0]);
@@ -1572,7 +1697,7 @@
1572
1697
  if (element == null) {
1573
1698
  return;
1574
1699
  }
1575
- if (isNodeList(element)) {
1700
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1576
1701
  if (html == null) {
1577
1702
  // 获取
1578
1703
  return DOMUtilsContext.html(element[0]);
@@ -1642,7 +1767,7 @@
1642
1767
  if (element == null) {
1643
1768
  return;
1644
1769
  }
1645
- if (isNodeList(element)) {
1770
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1646
1771
  if (value == null) {
1647
1772
  // 获取
1648
1773
  return DOMUtilsContext.val(element[0]);
@@ -1684,7 +1809,7 @@
1684
1809
  if (element == null) {
1685
1810
  return;
1686
1811
  }
1687
- if (isNodeList(element)) {
1812
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1688
1813
  if (propValue == null) {
1689
1814
  // 获取
1690
1815
  return DOMUtilsContext.prop(element[0], propName);
@@ -1726,7 +1851,7 @@
1726
1851
  if (element == null) {
1727
1852
  return;
1728
1853
  }
1729
- if (isNodeList(element)) {
1854
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1730
1855
  // 设置
1731
1856
  element.forEach(($ele) => {
1732
1857
  DOMUtilsContext.removeAttr($ele, attrName);
@@ -1752,7 +1877,7 @@
1752
1877
  if (element == null) {
1753
1878
  return;
1754
1879
  }
1755
- if (isNodeList(element)) {
1880
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1756
1881
  // 设置
1757
1882
  element.forEach(($ele) => {
1758
1883
  DOMUtilsContext.removeClass($ele, className);
@@ -1789,7 +1914,7 @@
1789
1914
  if (element == null) {
1790
1915
  return;
1791
1916
  }
1792
- if (isNodeList(element)) {
1917
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1793
1918
  // 设置
1794
1919
  element.forEach(($ele) => {
1795
1920
  DOMUtilsContext.removeProp($ele, propName);
@@ -1815,7 +1940,7 @@
1815
1940
  if (element == null) {
1816
1941
  return;
1817
1942
  }
1818
- if (isNodeList(element)) {
1943
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1819
1944
  // 设置
1820
1945
  element.forEach(($ele) => {
1821
1946
  DOMUtilsContext.replaceWith($ele, newElement);
@@ -1844,7 +1969,7 @@
1844
1969
  if (element == null) {
1845
1970
  return;
1846
1971
  }
1847
- if (isNodeList(element)) {
1972
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1848
1973
  // 设置
1849
1974
  element.forEach(($ele) => {
1850
1975
  DOMUtilsContext.addClass($ele, className);
@@ -1874,7 +1999,7 @@
1874
1999
  if (element == null) {
1875
2000
  return false;
1876
2001
  }
1877
- if (isNodeList(element)) {
2002
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1878
2003
  let flag = true;
1879
2004
  for (let index = 0; index < element.length; index++) {
1880
2005
  const $ele = element[index];
@@ -1913,7 +2038,7 @@
1913
2038
  if (element == null) {
1914
2039
  return;
1915
2040
  }
1916
- if (isNodeList(element)) {
2041
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1917
2042
  // 设置
1918
2043
  element.forEach(($ele) => {
1919
2044
  DOMUtilsContext.append($ele, content);
@@ -1960,7 +2085,7 @@
1960
2085
  if (element == null) {
1961
2086
  return;
1962
2087
  }
1963
- if (isNodeList(element)) {
2088
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1964
2089
  // 设置
1965
2090
  element.forEach(($ele) => {
1966
2091
  DOMUtilsContext.prepend($ele, content);
@@ -1997,7 +2122,7 @@
1997
2122
  if (element == null) {
1998
2123
  return;
1999
2124
  }
2000
- if (isNodeList(element)) {
2125
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2001
2126
  // 设置
2002
2127
  element.forEach(($ele) => {
2003
2128
  DOMUtilsContext.after($ele, content);
@@ -2036,7 +2161,7 @@
2036
2161
  if (element == null) {
2037
2162
  return;
2038
2163
  }
2039
- if (isNodeList(element)) {
2164
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2040
2165
  // 设置
2041
2166
  element.forEach(($ele) => {
2042
2167
  DOMUtilsContext.before($ele, content);
@@ -2073,7 +2198,7 @@
2073
2198
  if (element == null) {
2074
2199
  return;
2075
2200
  }
2076
- if (isNodeList(element)) {
2201
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2077
2202
  element.forEach(($ele) => {
2078
2203
  DOMUtilsContext.remove($ele);
2079
2204
  });
@@ -2097,7 +2222,7 @@
2097
2222
  if (element == null) {
2098
2223
  return;
2099
2224
  }
2100
- if (isNodeList(element)) {
2225
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2101
2226
  // 设置
2102
2227
  element.forEach(($ele) => {
2103
2228
  DOMUtilsContext.empty($ele);
@@ -2304,7 +2429,7 @@
2304
2429
  if (element == null) {
2305
2430
  return;
2306
2431
  }
2307
- if (isNodeList(element)) {
2432
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2308
2433
  // 设置
2309
2434
  element.forEach(($ele) => {
2310
2435
  DOMUtilsContext.animate($ele, styles, duration, callback);
@@ -2366,7 +2491,7 @@
2366
2491
  if (element == null) {
2367
2492
  return;
2368
2493
  }
2369
- if (isNodeList(element)) {
2494
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2370
2495
  // 设置
2371
2496
  element.forEach(($ele) => {
2372
2497
  DOMUtilsContext.wrap($ele, wrapperHTML);
@@ -2446,7 +2571,7 @@
2446
2571
  if (element == null) {
2447
2572
  return;
2448
2573
  }
2449
- if (isNodeList(element)) {
2574
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2450
2575
  let resultArray = [];
2451
2576
  element.forEach(($ele) => {
2452
2577
  resultArray.push(DOMUtilsContext.parent($ele));
@@ -2625,7 +2750,7 @@
2625
2750
  if (typeof element === "string") {
2626
2751
  element = DOMUtilsContext.selectorAll(element);
2627
2752
  }
2628
- if (isNodeList(element)) {
2753
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2629
2754
  // 设置
2630
2755
  element.forEach(($ele) => {
2631
2756
  DOMUtilsContext.fadeIn($ele, duration, callback);
@@ -2676,7 +2801,7 @@
2676
2801
  if (typeof element === "string") {
2677
2802
  element = DOMUtilsContext.selectorAll(element);
2678
2803
  }
2679
- if (isNodeList(element)) {
2804
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2680
2805
  // 设置
2681
2806
  element.forEach(($ele) => {
2682
2807
  DOMUtilsContext.fadeOut($ele, duration, callback);
@@ -2722,7 +2847,7 @@
2722
2847
  if (element == null) {
2723
2848
  return;
2724
2849
  }
2725
- if (isNodeList(element)) {
2850
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2726
2851
  // 设置
2727
2852
  element.forEach(($ele) => {
2728
2853
  DOMUtilsContext.toggle($ele);