@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.
@@ -461,6 +461,13 @@ var DOMUtils = (function () {
461
461
  globalThis.clearInterval(timeId);
462
462
  }
463
463
  },
464
+ /**
465
+ * 判断是否是元素列表
466
+ * @param $ele
467
+ */
468
+ isNodeList($ele) {
469
+ return Array.isArray($ele) || $ele instanceof NodeList;
470
+ },
464
471
  };
465
472
 
466
473
  /* 数据 */
@@ -587,12 +594,12 @@ var DOMUtils = (function () {
587
594
  : elementItem;
588
595
  let findValue = selectorList.find((selectorItem) => {
589
596
  // 判断目标元素是否匹配选择器
590
- if (eventTarget?.matches(selectorItem)) {
597
+ if (DOMUtilsContext.matches(eventTarget, selectorItem)) {
591
598
  /* 当前目标可以被selector所匹配到 */
592
599
  return true;
593
600
  }
594
601
  /* 在上层与主元素之间寻找可以被selector所匹配到的 */
595
- let $closestMatches = eventTarget?.closest(selectorItem);
602
+ let $closestMatches = DOMUtilsContext.closest(eventTarget, selectorItem);
596
603
  if ($closestMatches && totalParent?.contains($closestMatches)) {
597
604
  eventTarget = $closestMatches;
598
605
  return true;
@@ -974,7 +981,7 @@ var DOMUtils = (function () {
974
981
  if (element == null) {
975
982
  return;
976
983
  }
977
- if (isNodeList(element)) {
984
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
978
985
  // 设置
979
986
  element.forEach(($ele) => {
980
987
  DOMUtilsContext.click($ele, handler, details, useDispatchToTriggerEvent);
@@ -1010,7 +1017,7 @@ var DOMUtils = (function () {
1010
1017
  if (element == null) {
1011
1018
  return;
1012
1019
  }
1013
- if (isNodeList(element)) {
1020
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1014
1021
  // 设置
1015
1022
  element.forEach(($ele) => {
1016
1023
  DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
@@ -1046,7 +1053,7 @@ var DOMUtils = (function () {
1046
1053
  if (element == null) {
1047
1054
  return;
1048
1055
  }
1049
- if (isNodeList(element)) {
1056
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1050
1057
  // 设置
1051
1058
  element.forEach(($ele) => {
1052
1059
  DOMUtilsContext.focus($ele, handler, details, useDispatchToTriggerEvent);
@@ -1082,7 +1089,7 @@ var DOMUtils = (function () {
1082
1089
  if (element == null) {
1083
1090
  return;
1084
1091
  }
1085
- if (isNodeList(element)) {
1092
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1086
1093
  // 设置
1087
1094
  element.forEach(($ele) => {
1088
1095
  DOMUtilsContext.hover($ele, handler, option);
@@ -1115,7 +1122,7 @@ var DOMUtils = (function () {
1115
1122
  if (typeof element === "string") {
1116
1123
  element = DOMUtilsContext.selectorAll(element);
1117
1124
  }
1118
- if (isNodeList(element)) {
1125
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1119
1126
  // 设置
1120
1127
  element.forEach(($ele) => {
1121
1128
  DOMUtilsContext.keyup($ele, handler, option);
@@ -1147,7 +1154,7 @@ var DOMUtils = (function () {
1147
1154
  if (typeof element === "string") {
1148
1155
  element = DOMUtilsContext.selectorAll(element);
1149
1156
  }
1150
- if (isNodeList(element)) {
1157
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1151
1158
  // 设置
1152
1159
  element.forEach(($ele) => {
1153
1160
  DOMUtilsContext.keydown($ele, handler, option);
@@ -1179,7 +1186,7 @@ var DOMUtils = (function () {
1179
1186
  if (typeof element === "string") {
1180
1187
  element = DOMUtilsContext.selectorAll(element);
1181
1188
  }
1182
- if (isNodeList(element)) {
1189
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1183
1190
  // 设置
1184
1191
  element.forEach(($ele) => {
1185
1192
  DOMUtilsContext.keypress($ele, handler, option);
@@ -1333,21 +1340,139 @@ var DOMUtils = (function () {
1333
1340
  return Array.from(context.windowApi.document.querySelectorAll(selector));
1334
1341
  }
1335
1342
  }
1343
+ /**
1344
+ * 匹配元素,可使用以下的额外语法
1345
+ *
1346
+ * + :contains([text]) 作用: 找到包含指定文本内容的指定元素
1347
+ * + :empty 作用:找到既没有文本内容也没有子元素的指定元素
1348
+ * + :regexp([text]) 作用: 找到符合正则表达式的内容的指定元素
1349
+ * @param $el 元素
1350
+ * @param selector 选择器
1351
+ * @example
1352
+ * DOMUtils.matches("div:contains('测试')")
1353
+ * > true
1354
+ * @example
1355
+ * DOMUtils.matches("div:empty")
1356
+ * > true
1357
+ * @example
1358
+ * DOMUtils.matches("div:regexp('^xxxx$')")
1359
+ * > true
1360
+ * @example
1361
+ * DOMUtils.matches("div:regexp(/^xxx/ig)")
1362
+ * > false
1363
+ */
1364
+ matches($el, selector) {
1365
+ selector = selector.trim();
1366
+ if ($el == null) {
1367
+ return false;
1368
+ }
1369
+ if (selector.match(/[^\s]{1}:empty$/gi)) {
1370
+ // empty 语法
1371
+ selector = selector.replace(/:empty$/gi, "");
1372
+ return $el.matches(selector) && $el?.innerHTML?.trim() === "";
1373
+ }
1374
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
1375
+ selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
1376
+ // contains 语法
1377
+ let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
1378
+ let text = textMatch[2];
1379
+ selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
1380
+ // @ts-ignore
1381
+ let content = $el?.textContent || $el?.innerText;
1382
+ if (typeof content !== "string") {
1383
+ content = "";
1384
+ }
1385
+ return $el.matches(selector) && content?.includes(text);
1386
+ }
1387
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
1388
+ selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
1389
+ // regexp 语法
1390
+ let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
1391
+ let pattern = textMatch[2];
1392
+ let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
1393
+ let flags = "";
1394
+ if (flagMatch) {
1395
+ pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
1396
+ flags = flagMatch[3];
1397
+ }
1398
+ let regexp = new RegExp(pattern, flags);
1399
+ selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
1400
+ // @ts-ignore
1401
+ let content = $el?.textContent || $el?.innerText;
1402
+ if (typeof content !== "string") {
1403
+ content = "";
1404
+ }
1405
+ return $el.matches(selector) && Boolean(content?.match(regexp));
1406
+ }
1407
+ else {
1408
+ // 普通语法
1409
+ return $el.matches(selector);
1410
+ }
1411
+ }
1412
+ closest($el, selector) {
1413
+ selector = selector.trim();
1414
+ if (selector.match(/[^\s]{1}:empty$/gi)) {
1415
+ // empty 语法
1416
+ selector = selector.replace(/:empty$/gi, "");
1417
+ let $closest = $el?.closest(selector);
1418
+ if ($closest && $closest?.innerHTML?.trim() === "") {
1419
+ return $closest;
1420
+ }
1421
+ return null;
1422
+ }
1423
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
1424
+ selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
1425
+ // contains 语法
1426
+ let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
1427
+ let text = textMatch[2];
1428
+ selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
1429
+ let $closest = $el?.closest(selector);
1430
+ if ($closest) {
1431
+ // @ts-ignore
1432
+ let content = $el?.textContent || $el?.innerText;
1433
+ if (typeof content === "string" && content.includes(text)) {
1434
+ return $closest;
1435
+ }
1436
+ }
1437
+ return null;
1438
+ }
1439
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
1440
+ selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
1441
+ // regexp 语法
1442
+ let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
1443
+ let pattern = textMatch[2];
1444
+ let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
1445
+ let flags = "";
1446
+ if (flagMatch) {
1447
+ pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
1448
+ flags = flagMatch[3];
1449
+ }
1450
+ let regexp = new RegExp(pattern, flags);
1451
+ selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
1452
+ let $closest = $el?.closest(selector);
1453
+ if ($closest) {
1454
+ // @ts-ignore
1455
+ let content = $el?.textContent || $el?.innerText;
1456
+ if (typeof content === "string" && content.match(regexp)) {
1457
+ return $closest;
1458
+ }
1459
+ }
1460
+ return null;
1461
+ }
1462
+ else {
1463
+ // 普通语法
1464
+ let $closest = $el?.closest(selector);
1465
+ return $closest;
1466
+ }
1467
+ }
1336
1468
  }
1337
1469
 
1338
- /**
1339
- * 判断是否是元素列表
1340
- * @param $ele
1341
- */
1342
- const isNodeList = ($ele) => {
1343
- return Array.isArray($ele) || $ele instanceof NodeList;
1344
- };
1345
1470
  class DOMUtils extends DOMUtilsEvent {
1346
1471
  constructor(option) {
1347
1472
  super(option);
1348
1473
  }
1349
1474
  /** 版本号 */
1350
- version = "2025.5.26";
1475
+ version = "2025.5.30";
1351
1476
  attr(element, attrName, attrValue) {
1352
1477
  let DOMUtilsContext = this;
1353
1478
  if (typeof element === "string") {
@@ -1356,7 +1481,7 @@ var DOMUtils = (function () {
1356
1481
  if (element == null) {
1357
1482
  return;
1358
1483
  }
1359
- if (isNodeList(element)) {
1484
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1360
1485
  if (attrValue == null) {
1361
1486
  // 获取属性
1362
1487
  return DOMUtilsContext.attr(element[0], attrName, attrValue);
@@ -1466,7 +1591,7 @@ var DOMUtils = (function () {
1466
1591
  if (element == null) {
1467
1592
  return;
1468
1593
  }
1469
- if (isNodeList(element)) {
1594
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1470
1595
  if (typeof property === "string") {
1471
1596
  if (value == null) {
1472
1597
  // 获取属性
@@ -1533,7 +1658,7 @@ var DOMUtils = (function () {
1533
1658
  if (element == null) {
1534
1659
  return;
1535
1660
  }
1536
- if (isNodeList(element)) {
1661
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1537
1662
  if (text == null) {
1538
1663
  // 获取
1539
1664
  return DOMUtilsContext.text(element[0]);
@@ -1569,7 +1694,7 @@ var DOMUtils = (function () {
1569
1694
  if (element == null) {
1570
1695
  return;
1571
1696
  }
1572
- if (isNodeList(element)) {
1697
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1573
1698
  if (html == null) {
1574
1699
  // 获取
1575
1700
  return DOMUtilsContext.html(element[0]);
@@ -1639,7 +1764,7 @@ var DOMUtils = (function () {
1639
1764
  if (element == null) {
1640
1765
  return;
1641
1766
  }
1642
- if (isNodeList(element)) {
1767
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1643
1768
  if (value == null) {
1644
1769
  // 获取
1645
1770
  return DOMUtilsContext.val(element[0]);
@@ -1681,7 +1806,7 @@ var DOMUtils = (function () {
1681
1806
  if (element == null) {
1682
1807
  return;
1683
1808
  }
1684
- if (isNodeList(element)) {
1809
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1685
1810
  if (propValue == null) {
1686
1811
  // 获取
1687
1812
  return DOMUtilsContext.prop(element[0], propName);
@@ -1723,7 +1848,7 @@ var DOMUtils = (function () {
1723
1848
  if (element == null) {
1724
1849
  return;
1725
1850
  }
1726
- if (isNodeList(element)) {
1851
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1727
1852
  // 设置
1728
1853
  element.forEach(($ele) => {
1729
1854
  DOMUtilsContext.removeAttr($ele, attrName);
@@ -1749,7 +1874,7 @@ var DOMUtils = (function () {
1749
1874
  if (element == null) {
1750
1875
  return;
1751
1876
  }
1752
- if (isNodeList(element)) {
1877
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1753
1878
  // 设置
1754
1879
  element.forEach(($ele) => {
1755
1880
  DOMUtilsContext.removeClass($ele, className);
@@ -1786,7 +1911,7 @@ var DOMUtils = (function () {
1786
1911
  if (element == null) {
1787
1912
  return;
1788
1913
  }
1789
- if (isNodeList(element)) {
1914
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1790
1915
  // 设置
1791
1916
  element.forEach(($ele) => {
1792
1917
  DOMUtilsContext.removeProp($ele, propName);
@@ -1812,7 +1937,7 @@ var DOMUtils = (function () {
1812
1937
  if (element == null) {
1813
1938
  return;
1814
1939
  }
1815
- if (isNodeList(element)) {
1940
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1816
1941
  // 设置
1817
1942
  element.forEach(($ele) => {
1818
1943
  DOMUtilsContext.replaceWith($ele, newElement);
@@ -1841,7 +1966,7 @@ var DOMUtils = (function () {
1841
1966
  if (element == null) {
1842
1967
  return;
1843
1968
  }
1844
- if (isNodeList(element)) {
1969
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1845
1970
  // 设置
1846
1971
  element.forEach(($ele) => {
1847
1972
  DOMUtilsContext.addClass($ele, className);
@@ -1871,7 +1996,7 @@ var DOMUtils = (function () {
1871
1996
  if (element == null) {
1872
1997
  return false;
1873
1998
  }
1874
- if (isNodeList(element)) {
1999
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1875
2000
  let flag = true;
1876
2001
  for (let index = 0; index < element.length; index++) {
1877
2002
  const $ele = element[index];
@@ -1910,7 +2035,7 @@ var DOMUtils = (function () {
1910
2035
  if (element == null) {
1911
2036
  return;
1912
2037
  }
1913
- if (isNodeList(element)) {
2038
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1914
2039
  // 设置
1915
2040
  element.forEach(($ele) => {
1916
2041
  DOMUtilsContext.append($ele, content);
@@ -1957,7 +2082,7 @@ var DOMUtils = (function () {
1957
2082
  if (element == null) {
1958
2083
  return;
1959
2084
  }
1960
- if (isNodeList(element)) {
2085
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1961
2086
  // 设置
1962
2087
  element.forEach(($ele) => {
1963
2088
  DOMUtilsContext.prepend($ele, content);
@@ -1994,7 +2119,7 @@ var DOMUtils = (function () {
1994
2119
  if (element == null) {
1995
2120
  return;
1996
2121
  }
1997
- if (isNodeList(element)) {
2122
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
1998
2123
  // 设置
1999
2124
  element.forEach(($ele) => {
2000
2125
  DOMUtilsContext.after($ele, content);
@@ -2033,7 +2158,7 @@ var DOMUtils = (function () {
2033
2158
  if (element == null) {
2034
2159
  return;
2035
2160
  }
2036
- if (isNodeList(element)) {
2161
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2037
2162
  // 设置
2038
2163
  element.forEach(($ele) => {
2039
2164
  DOMUtilsContext.before($ele, content);
@@ -2070,7 +2195,7 @@ var DOMUtils = (function () {
2070
2195
  if (element == null) {
2071
2196
  return;
2072
2197
  }
2073
- if (isNodeList(element)) {
2198
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2074
2199
  element.forEach(($ele) => {
2075
2200
  DOMUtilsContext.remove($ele);
2076
2201
  });
@@ -2094,7 +2219,7 @@ var DOMUtils = (function () {
2094
2219
  if (element == null) {
2095
2220
  return;
2096
2221
  }
2097
- if (isNodeList(element)) {
2222
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2098
2223
  // 设置
2099
2224
  element.forEach(($ele) => {
2100
2225
  DOMUtilsContext.empty($ele);
@@ -2301,7 +2426,7 @@ var DOMUtils = (function () {
2301
2426
  if (element == null) {
2302
2427
  return;
2303
2428
  }
2304
- if (isNodeList(element)) {
2429
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2305
2430
  // 设置
2306
2431
  element.forEach(($ele) => {
2307
2432
  DOMUtilsContext.animate($ele, styles, duration, callback);
@@ -2363,7 +2488,7 @@ var DOMUtils = (function () {
2363
2488
  if (element == null) {
2364
2489
  return;
2365
2490
  }
2366
- if (isNodeList(element)) {
2491
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2367
2492
  // 设置
2368
2493
  element.forEach(($ele) => {
2369
2494
  DOMUtilsContext.wrap($ele, wrapperHTML);
@@ -2443,7 +2568,7 @@ var DOMUtils = (function () {
2443
2568
  if (element == null) {
2444
2569
  return;
2445
2570
  }
2446
- if (isNodeList(element)) {
2571
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2447
2572
  let resultArray = [];
2448
2573
  element.forEach(($ele) => {
2449
2574
  resultArray.push(DOMUtilsContext.parent($ele));
@@ -2622,7 +2747,7 @@ var DOMUtils = (function () {
2622
2747
  if (typeof element === "string") {
2623
2748
  element = DOMUtilsContext.selectorAll(element);
2624
2749
  }
2625
- if (isNodeList(element)) {
2750
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2626
2751
  // 设置
2627
2752
  element.forEach(($ele) => {
2628
2753
  DOMUtilsContext.fadeIn($ele, duration, callback);
@@ -2673,7 +2798,7 @@ var DOMUtils = (function () {
2673
2798
  if (typeof element === "string") {
2674
2799
  element = DOMUtilsContext.selectorAll(element);
2675
2800
  }
2676
- if (isNodeList(element)) {
2801
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2677
2802
  // 设置
2678
2803
  element.forEach(($ele) => {
2679
2804
  DOMUtilsContext.fadeOut($ele, duration, callback);
@@ -2719,7 +2844,7 @@ var DOMUtils = (function () {
2719
2844
  if (element == null) {
2720
2845
  return;
2721
2846
  }
2722
- if (isNodeList(element)) {
2847
+ if (DOMUtilsCommonUtils.isNodeList(element)) {
2723
2848
  // 设置
2724
2849
  element.forEach(($ele) => {
2725
2850
  DOMUtilsContext.toggle($ele);