@joyzl/eno 1.2.6 → 1.2.7

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.
Files changed (2) hide show
  1. package/index.js +126 -4
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -12,6 +12,8 @@ export default {
12
12
  show,
13
13
  hide,
14
14
  toggle,
15
+ classes,
16
+ attribute,
15
17
 
16
18
  get,
17
19
  gets,
@@ -205,7 +207,7 @@ function select(element, selector) {
205
207
  * @example eno.selects(element,selector);
206
208
  * @param {HTMLElement} element 要在其中查找的父标签元素
207
209
  * @param {String} selector 选择器字符串
208
- * @return {HTMLElement[]|null} 匹配的多个标签元素,仅匹配一个也返回数组
210
+ * @return {HTMLElement[]|null} 匹配的多个标签元素数组,仅匹配一个也返回数组
209
211
  */
210
212
  function selects(element, selector) {
211
213
  if (arguments.length == 1) {
@@ -255,6 +257,7 @@ function selects(element, selector) {
255
257
  * 从文档移除标签元素
256
258
  * @param {HTMLElement} element 要在其中查找的父标签元素
257
259
  * @param {String} selector 选择器字符串
260
+ * @return {HTMLElement[]|null} 移除的标签元素数组
258
261
  */
259
262
  function remove(element, selector) {
260
263
  if (arguments.length == 1) {
@@ -271,12 +274,14 @@ function remove(element, selector) {
271
274
  element[i].remove();
272
275
  }
273
276
  }
277
+ return element;
274
278
  }
275
279
 
276
280
  /**
277
281
  * 隐藏标签元素
278
282
  * @param {HTMLElement} element 要在其中查找的父标签元素
279
283
  * @param {String} selector 选择器字符串
284
+ * @return {HTMLElement[]|null} 隐藏的标签元素数组
280
285
  */
281
286
  function hide(element, selector) {
282
287
  if (arguments.length == 1) {
@@ -293,12 +298,14 @@ function hide(element, selector) {
293
298
  hideElement(element[i]);
294
299
  }
295
300
  }
301
+ return element;
296
302
  }
297
303
 
298
304
  /**
299
305
  * 显示标签元素
300
306
  * @param {HTMLElement} element 要在其中查找的父标签元素
301
307
  * @param {String} selector 选择器字符串
308
+ * @return {HTMLElement[]|null} 显示的标签元素数组
302
309
  */
303
310
  function show(element, selector) {
304
311
  if (arguments.length == 1) {
@@ -315,6 +322,7 @@ function show(element, selector) {
315
322
  showElement(element[i]);
316
323
  }
317
324
  }
325
+ return element;
318
326
  }
319
327
 
320
328
  function hideElement(element) {
@@ -414,6 +422,7 @@ function toggleElements(elements) {
414
422
  }
415
423
 
416
424
  function toggleClass(element, apply, other) {
425
+ // 移除同级其它元素样式名
417
426
  const parent = element.parentElement;
418
427
  for (let i = 0; i < parent.children.length; i++) {
419
428
  if (element !== parent.children[i]) {
@@ -421,6 +430,7 @@ function toggleClass(element, apply, other) {
421
430
  parent.children[i].classList.add(other);
422
431
  }
423
432
  }
433
+ // 添加当前元素样式名
424
434
  element.classList.remove(other);
425
435
  element.classList.add(apply);
426
436
  }
@@ -431,6 +441,7 @@ function toggleClasses(elements, apply, other) {
431
441
  for (let e = 0; e < elements.length; e++) {
432
442
  element = elements[e];
433
443
  if (element.parentElement !== parent) {
444
+ // 移除同级其它元素样式名
434
445
  parent = element.parentElement;
435
446
  for (i = 0; i < parent.children.length; i++) {
436
447
  if (element !== parent.children[i]) {
@@ -439,11 +450,107 @@ function toggleClasses(elements, apply, other) {
439
450
  }
440
451
  }
441
452
  }
453
+ // 添加当前元素样式名
442
454
  element.classList.remove(other);
443
455
  element.classList.add(apply);
444
456
  }
445
457
  }
446
458
 
459
+ /**
460
+ * 添加和移除样式名
461
+ * @param {HTMLElement} element 要在其中查找的父标签元素
462
+ * @param {String} selector 选择器字符串
463
+ * @param {String} apply 要添加的样式名
464
+ * @param {String} remove 要移除的样式名
465
+ * @return {HTMLElement[]} 添加或移除样式名的标签元素数组
466
+ * @example classes(element,apply)
467
+ * @example classes(element,selector,apply)
468
+ * @example classes(element,selector,apply,remove)
469
+ */
470
+ function classes(element, selector, apply, remove) {
471
+ if (arguments.length == 1) {
472
+ // classes(element) 无效
473
+ return null;
474
+ } else
475
+ if (arguments.length == 2) {
476
+ // classes(element,selector) 无效
477
+ // classes(element,apply)
478
+ element = selects(element);
479
+ apply = selector;
480
+ } else
481
+ if (arguments.length == 3) {
482
+ // classes(element,selector,apply)
483
+ // classes(element,apply,remove) 无效(无法辨别)
484
+ element = selects(element, selector);
485
+ } else
486
+ if (arguments.length == 4) {
487
+ // classes(element,selector,apply,remove)
488
+ element = selects(element, selector);
489
+ }
490
+
491
+ if (element) {
492
+ if (apply) {
493
+ if (remove) {
494
+ for (let e = 0; e < element.length; e++) {
495
+ element[e].classList.remove(remove);
496
+ element[e].classList.add(apply);
497
+ }
498
+ } else {
499
+ for (let e = 0; e < element.length; e++) {
500
+ element[e].classList.add(apply);
501
+ }
502
+ }
503
+ } else {
504
+ if (remove) {
505
+ for (let e = 0; e < element.length; e++) {
506
+ element[e].classList.remove(remove);
507
+ }
508
+ }
509
+ }
510
+ return element;
511
+ }
512
+ return null;
513
+ }
514
+
515
+ /**
516
+ * 设置标签元素属性值
517
+ * @param {HTMLElement} element 要在其中查找的父标签元素
518
+ * @param {String} selector 选择器字符串
519
+ * @param {String} name 属性名(必须指定)
520
+ * @param {String} value 属性值(必须指定)
521
+ */
522
+ function attribute(element, selector, name, value) {
523
+ if (arguments.length == 1) {
524
+ // attribute(element) 无效
525
+ return null;
526
+ } else
527
+ if (arguments.length == 2) {
528
+ // attribute(element,selector) 无效
529
+ return null;
530
+ } else
531
+ if (arguments.length == 3) {
532
+ // classes(element,selector,name) 无效
533
+ // classes(element,name,value)
534
+ element = selects(element);
535
+ value = name;
536
+ name = selector;
537
+ } else
538
+ if (arguments.length == 4) {
539
+ // classes(element,selector,name,value)
540
+ element = selects(element, selector);
541
+ }
542
+
543
+ if (element) {
544
+ value = value ? value : "";
545
+ for (let e = 0; e < element.length; e++) {
546
+ element[e].setAttribute(name, value);
547
+ }
548
+ return element;
549
+ }
550
+ // 移除属性值使用情形极少
551
+ return null;
552
+ }
553
+
447
554
  // 默认转换函数
448
555
  function defaultConverter(element, entity, name) {
449
556
  // return 0; 使用返回值
@@ -718,7 +825,11 @@ function getEntity(element, entity, converter) {
718
825
  // 所有控件具有type属性
719
826
  // 所有控件具有disabled属性
720
827
  // <select> <textarea> 没有checked属性,其余均有
721
- if (!element.disabled) {
828
+ if (element.disabled) {
829
+ // <fieldset> 禁用后其内部控件全部无效,但内部控件的disabled不一定为true
830
+ // 阻止禁用控件的子元素处理
831
+ return;
832
+ } else {
722
833
  if (element.type === "number" || element.type === "range") {
723
834
  if (!isNaN(element.valueAsNumber)) {
724
835
  setValue(entity, name, element.valueAsNumber);
@@ -811,10 +922,16 @@ function setEntity(element, entity, converter) {
811
922
  }
812
923
  }
813
924
  }
925
+
814
926
  name = element.getAttribute("case");
815
927
  if (name && name.length) {
816
- converter(element, entity, name);
928
+ if (converter(element, entity, name)) {
929
+ // 继续处理
930
+ } else {
931
+ return;
932
+ }
817
933
  }
934
+
818
935
  if (element.childElementCount) {
819
936
  for (let i = 0; i < element.children.length; i++) {
820
937
  setEntity(element.children[i], entity, converter);
@@ -971,6 +1088,8 @@ function entity(e, selector) {
971
1088
  * 根据事件或标签元素获取由eno.sets()对应标签元素
972
1089
  * @param {Event|HTMLElement} e 事件或标签元素
973
1090
  * @return {HTMLElement} 实体对象对应的标签元素
1091
+ * @example element(event);
1092
+ * @example element(element);
974
1093
  */
975
1094
  function element(e) {
976
1095
  if (e) {
@@ -999,6 +1118,9 @@ function element(e) {
999
1118
  * @param {Event} event
1000
1119
  * @param {String} name
1001
1120
  * @param {String} value
1121
+ * @example target(event); 返回事件源标签元素
1122
+ * @example target(event, name); 返回事件目标标签元素指定的属性值
1123
+ * @example target(event, name, value); 返回事件目标指定属性和值的标签元素
1002
1124
  */
1003
1125
  function target(event, name, value) {
1004
1126
  if (arguments.length == 1) {
@@ -1010,7 +1132,7 @@ function target(event, name, value) {
1010
1132
  let element = event.target || event.srcElement;
1011
1133
  while (element && element !== event.currentTarget) {
1012
1134
  if (element.hasAttribute(name)) {
1013
- return element;
1135
+ return element.getAttribute(name);
1014
1136
  }
1015
1137
  element = element.parentElement;
1016
1138
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joyzl/eno",
3
- "version": "1.2.6",
3
+ "version": "1.2.7",
4
4
  "description": "Easy Node Object",
5
5
  "main": "dist/joyzl-eno.js",
6
6
  "module": "index.js",