@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.
- package/index.js +126 -4
- 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 (
|
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
|
}
|