@joyzl/eno 1.0.1 → 1.1.0

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 (3) hide show
  1. package/index.js +353 -343
  2. package/package.json +1 -1
  3. package/publish.cmd +0 -1
package/index.js CHANGED
@@ -1,382 +1,319 @@
1
1
  // HTML5 Node Element
2
2
  // Easy Node Object
3
- // 提供HTML标签与数据对象之间的互操作支持。
3
+ // 提供HTML标签元素处理与数据对象之间的互操作支持。
4
4
 
5
5
  export default {
6
6
  create,
7
- remove,
8
-
7
+ append,
8
+ replace,
9
9
  select,
10
- selects,
11
- query,
12
- on,
10
+ remove,
13
11
 
14
12
  show,
15
13
  hide,
16
- stack,
17
14
  toggle,
18
15
 
19
16
  gets,
20
17
  sets,
18
+
19
+ bind,
21
20
  entity,
22
21
  action,
23
22
  element,
24
23
 
25
- date,
26
- time,
27
- datetime
24
+ query
28
25
  }
29
26
 
27
+ // 这个临时标签用于解析HTML字符串
28
+ const TEMP = document.createElement("div");
29
+
30
30
  /**
31
- * 显示单个/多个元素
32
- * @param {Element} element
33
- */
34
- function show(element) {
35
- if (element) {
36
- if (element.trim) {
37
- show(selects(element));
38
- } else
39
- if (element.length) {
40
- for (let i = 0; i < element.length; i++) {
41
- show(element[i]);
42
- }
43
- } else
44
- if (element.nodeType) {
45
- element.hidden = false;
46
- }
47
- }
48
- }
49
- /**
50
- * 隐藏单个/多个元素
51
- * @param {Element} element
31
+ * HTML字符串创建标签元素实例
32
+ * @param {String} html HTML字符串
33
+ * @return {Element} 创建的单个/多个标签元素
52
34
  */
53
- function hide(element) {
54
- if (element) {
55
- if (element.trim) {
56
- hide(selects(element));
57
- } else
58
- if (element.length) {
59
- for (let i = 0; i < element.length; i++) {
60
- hide(element[i]);
61
- }
62
- } else
63
- if (element.nodeType) {
64
- element.hidden = true;
65
- }
35
+ function create(html) {
36
+ // 创建元素
37
+ TEMP.innerHTML = html;
38
+ let element;
39
+ if (TEMP.childElementCount == 1) {
40
+ element = TEMP.children[0];
41
+ element.remove();
42
+ } else
43
+ if (TEMP.childElementCount > 1) {
44
+ element = new Array();
45
+ do {
46
+ element.push(TEMP.children[0]);
47
+ TEMP.children[0].remove();
48
+ } while (TEMP.childElementCount > 0);
66
49
  }
50
+ return element;
51
+
52
+ // DocumentFragment
67
53
  }
54
+
68
55
  /**
69
- * 切换指定元素显示,其余元素隐藏
70
- * @param {Object} parent 父级
71
- * @param {Object} element 当前元素
72
- * @param {String} className 类名称
56
+ * 创建并添加标签元素
57
+ * @param {Element} element 标签元素
58
+ * @param {String} html HTML字符串
59
+ * @return {Element} 创建的单个/多个标签元素
73
60
  */
74
- function toggle(parent, element, className) {
61
+ function append(element, html) {
75
62
  if (arguments.length == 1) {
76
- // toggle(element);
77
- element = parent;
78
- if (element.trim) {
79
- element = select(element);
80
- }
81
- if (element.hidden) {
82
- element.hidden = false;
83
- } else {
84
- element.hidden = true;
85
- }
63
+ // append(html);
64
+ element = document.body;
86
65
  } else
87
66
  if (arguments.length == 2) {
88
- // toggle(parent,element);
89
- if (parent.trim) {
90
- parent = select(parent);
91
- }
92
- if (element.trim) {
93
- element = select(element);
94
- }
95
- if (element.parentElement != parent) {
96
- parent.appendChild(element);
97
- }
98
- for (let i = 0; i < parent.children.length; i++) {
99
- if (element == parent.children[i]) {
100
- parent.children[i].hidden = false;
101
- } else {
102
- parent.children[i].hidden = true;
103
- }
67
+ // append(element,html);
68
+ element = select(element);
69
+ } else {
70
+ return;
71
+ }
72
+ if (html.trim) {
73
+ html = create(html);
74
+ }
75
+ if (html.length) {
76
+ for (let i = 0; i < html.length; i++) {
77
+ element.appendChild(html[i]);
104
78
  }
105
- } else
106
- if (arguments.length == 3) {
107
- // toggle(parent,element,className);
108
-
79
+ } else {
80
+ element.appendChild(html);
109
81
  }
110
- }
111
-
112
- function stack(parent, element, className) {
113
- // 单选 增加class/移除其它
114
- // 多选 增加class
115
- // 增加 class
116
- // 移除 class
82
+ return html;
117
83
  }
118
84
 
119
85
  /**
120
- * 在指定元素内/整个文档查找标签
121
- * @param {Element} element 元素内
122
- * @param {String} selector 选择器
86
+ * 创建并替换为标签元素
87
+ * @param {Element} element 标签元素
88
+ * @param {String} html HTML字符串
89
+ * @return {Element} 创建的单个/多个标签元素
123
90
  */
124
- function select(element, selector) {
125
- // 仅指定1个参数
126
- if (arguments.length == 1) {
127
- // select(selector);
128
- selector = element;
129
- return document.querySelector(selector);
91
+ function replace(element, html) {
92
+ if (arguments.length == 2) {
93
+ element = select(element);
94
+ } else {
95
+ return;
130
96
  }
131
- // 指定了2个参数
132
- if (arguments.length >= 2) {
133
- // select(element, selector);
134
- if (element) {
135
- if (element.trim) {
136
- element = document.querySelectorAll(element);
137
- }
138
- if (element.nodeType) {
139
- return element.querySelector(selector);
140
- } else
141
- if (Array.isArray(element)) {
142
- let node;
143
- for (let i = 0; i < elements.length; i++) {
144
- node = elements[i].querySelector(selector);
145
- if (node) {
146
- return node;
147
- }
97
+ if (html.trim) {
98
+ html = create(html);
99
+ }
100
+ if (element.parentElement) {
101
+ if (html.length) {
102
+ let item;
103
+ for (let i = 0; i < html.length; i++) {
104
+ item = html[i];
105
+ if (element.className) {
106
+ item.className += element.className;
107
+ }
108
+ if (element.style.cssText) {
109
+ item.style.cssText += element.style.cssText;
148
110
  }
149
111
  }
150
- return null;
112
+ element.replaceWith(html);
151
113
  } else {
152
- return document.querySelector(selector);
114
+ if (element.className) {
115
+ html.className += element.className;
116
+ }
117
+ if (element.style.cssText) {
118
+ html.style.cssText += element.style.cssText;
119
+ }
120
+ element.parentElement.replaceChild(element, html);
153
121
  }
154
122
  }
123
+ return html;
155
124
  }
156
125
 
157
126
  /**
158
- * 在指定元素内/整个文档查找标签
159
- * @param {Element} element 元素内
160
- * @param {String} selector 选择器
161
- * @returns {NodeList} 元素集合/空集合
127
+ * 在指定范围内/整个文档查找
128
+ * @param {Element} element 标签元素
129
+ * @param {String} selector 筛选字符
130
+ * @return {Element} 匹配的单个/多个标签元素
162
131
  */
163
- function selects(element, selector) {
164
- // 仅指定1个参数
132
+ function select(element, selector) {
165
133
  if (arguments.length == 1) {
166
- // select(selector);
167
- selector = element;
168
- return document.querySelectorAll(selector);
169
- }
170
- // 指定了2个参数
171
- if (arguments.length >= 2) {
134
+ // 仅指定1个参数
135
+ // select(element/selector);
136
+ if (element.trim) {
137
+ element = document.querySelectorAll(element);
138
+ if (element.length == 0) {
139
+ return null;
140
+ }
141
+ if (element.length == 1) {
142
+ return element[0];
143
+ }
144
+ return Array.from(element);
145
+ } else
146
+ if (element.nodeType) {
147
+ return element;
148
+ }
149
+ } else
150
+ if (arguments.length == 2) {
151
+ // 指定了2个参数
172
152
  // select(element, selector);
173
- let nodes, items = new Array();
174
153
  if (element.trim) {
175
154
  element = document.querySelectorAll(element);
155
+ } else
156
+ if (element.nodeType) {
157
+ element = element.querySelectorAll(selector);
158
+ if (element.length == 0) {
159
+ return null;
160
+ }
161
+ if (element.length == 1) {
162
+ return element[0];
163
+ }
164
+ return Array.from(element);
176
165
  }
177
- if (Array.isArray(element)) {
166
+ if (element.length) {
167
+ let nodes, items = new Array();
178
168
  for (let i = 0; i < element.length; i++) {
179
169
  nodes = element[i].querySelectorAll(selector);
180
- if (nodes && nodes.length) {
181
- for (let i = 0; i < nodes.length; ++i) {
182
- items.push(nodes[i]);
183
- }
170
+ for (let n = 0; n < nodes.length; n++) {
171
+ items.push(nodes[n]);
184
172
  }
185
173
  }
186
- } else {
187
- nodes = element.querySelectorAll(selector);
188
- if (nodes && nodes.length) {
189
- for (let i = 0; i < nodes.length; ++i) {
190
- items.push(nodes[i]);
191
- }
174
+ if (items.length == 0) {
175
+ return null;
176
+ }
177
+ if (items.length == 1) {
178
+ return items[0];
192
179
  }
180
+ return items;
193
181
  }
194
- return items;
195
182
  }
196
183
  }
197
184
 
198
185
  /**
199
- * 绑定事件
200
- * @param {Element} element
201
- * @param {String} selector
202
- * @param {String} evt
203
- * @param {Function} listener
186
+ * 从文档移除
187
+ * @param {Element} element 标签元素
188
+ * @param {String} selector 筛选字符
189
+ * @return {Element} 移除的单个/多个标签元素
204
190
  */
205
- function on(element, selector, evt, listener) {
206
- if (arguments.length == 3) {
207
- // on(element/selector, evt, listener);
208
- listener = evt;
209
- evt = selector;
210
- if (element.trim) {
211
- element = selects(element);
212
- }
191
+ function remove(element, selector) {
192
+ if (arguments.length == 1) {
193
+ element = select(element);
213
194
  } else
214
- if (arguments.length == 4) {
215
- // on(element, selector, evt, listener);
216
- element = selects(element, selector);
195
+ if (arguments.length == 2) {
196
+ element = select(element, selector);
217
197
  } else {
218
198
  return;
219
199
  }
220
-
221
- if (Array.isArray(element)) {
222
- for (let i = 0; i < element.length; i++) {
223
- element[i].addEventListener(evt, listener);
200
+ if (element) {
201
+ if (element.length) {
202
+ for (let i = 0; i < element.length; i++) {
203
+ element[i].remove();
204
+ }
205
+ } else {
206
+ element.remove();
224
207
  }
225
- } else {
226
- element.addEventListener(evt, listener);
227
208
  }
209
+ return element;
228
210
  }
229
211
 
230
- // 这个临时标签用于解析HTML字符串
231
- const TEMP = document.createElement("div");
232
-
233
212
  /**
234
- * 字符串创建HTML元素;
235
- * A仅创建;
236
- * B创建并添加到末尾:append;
237
- * C创建并替换已有元素:replace;
238
- * @param {String} parent
239
- * @param {String} html 字符串形式的HTML内容
240
- * @param {String} place append/replace
241
- * @return {Element} 单个/多个元素
213
+ * 隐藏单个/多个元素
214
+ * @param {Element} element 标签元素
215
+ * @param {String} selector 筛选字符
216
+ * @return {Element} 隐藏的单个/多个标签元素
242
217
  */
243
- function create(parent, html, place) {
244
- if (arguments.length == 0) {
245
- // create();
246
- return null;
247
- } else
218
+ function hide(element, selector) {
248
219
  if (arguments.length == 1) {
249
- // create(html);
250
- html = parent;
251
- parent = null;
220
+ element = select(element);
252
221
  } else
253
222
  if (arguments.length == 2) {
254
- // create(parent,html);
255
- place = 'append';
256
- if (parent) {
257
- if (parent.nodeType) {} else {
258
- parent = select(parent);
259
- }
260
- } else {
261
- parent = document.body;
262
- }
263
- } else
264
- if (arguments.length == 3) {
265
- // create(parent,html,place);
266
- if (parent) {
267
- if (parent.nodeType) {} else {
268
- parent = select(parent);
269
- }
270
- } else {
271
- parent = document.body;
272
- }
273
- }
274
-
275
- // 创建元素
276
- TEMP.innerHTML = html;
277
- let element;
278
- if (TEMP.childElementCount == 1) {
279
- element = TEMP.children[0];
280
- element.remove();
281
- } else
282
- if (TEMP.childElementCount > 1) {
283
- element = new Array();
284
- for (let i = 0; i < TEMP.childElementCount; ++i) {
285
- element.push(TEMP.children[i]);
286
- TEMP.children[i].remove();
287
- }
223
+ element = select(element, selector);
288
224
  } else {
289
- return null;
225
+ return;
290
226
  }
291
-
292
- // 添加元素到文档
293
- if (parent) {
294
- if ("append" === place) {
295
- if (element.length) {
296
- for (let i = 0; i < element.length; i++) {
297
- parent.appendChild(element[i]);
298
- }
299
- } else {
300
- parent.appendChild(element);
301
- }
302
- } else
303
- if ("replace" === place) {
304
- if (parent.parentElement) {
305
- if (element.length) {
306
- // 待验证
307
- parent.parentElement.replaceWith(element);
308
- } else {
309
- parent.parentElement.replaceChild(parent, element);
310
- }
227
+ if (element) {
228
+ if (element.length) {
229
+ for (let i = 0; i < element.length; i++) {
230
+ element[i].hidden = true;
231
+ element[i].__DISPLAY = element[i].style.display
232
+ element[i].style.display = "none";
311
233
  }
312
234
  } else {
313
- console.error("eno.create 不明确的参数" + place);
235
+ element.hidden = true;
236
+ element.__DISPLAY = element[i].style.display
237
+ // display:flex 导致 hidden 属性失效而不会隐藏
238
+ element.style.display = "none";
314
239
  }
315
240
  }
316
241
  return element;
317
242
  }
318
243
 
319
244
  /**
320
- * 从文档移除一个或多个元素
321
- * @param {Element} element 元素/元素数组
245
+ * 显示单个/多个元素
246
+ * @param {Element} element 标签元素
247
+ * @param {String} selector 筛选字符
248
+ * @return {Element} 显示的单个/多个标签元素
322
249
  */
323
- function remove(element) {
250
+ function show(element, selector) {
251
+ if (arguments.length == 1) {
252
+ element = select(element);
253
+ } else
254
+ if (arguments.length == 2) {
255
+ element = select(element, selector);
256
+ } else {
257
+ return;
258
+ }
324
259
  if (element) {
325
- if (element.trim) {
326
- // remove("p");
327
- element = selects(element);
328
- }
329
- if (element.tagName) {
330
- // remove(document.getElementById("test"));
331
- element.remove();
332
- } else
333
260
  if (element.length) {
334
- // remove(["p","span"]);
335
- // remove(document.getElementByTagName("div"));
336
261
  for (let i = 0; i < element.length; i++) {
337
- remove(element[i]);
262
+ element[i].hidden = false;
263
+ element[i].style.display = element[i].__DISPLAY;
338
264
  }
265
+ } else {
266
+ element.hidden = false;
267
+ element.style.display = element.__DISPLAY;
339
268
  }
340
269
  }
270
+ return element;
341
271
  }
342
272
 
343
273
  /**
344
- * 读取 URL 中的 Query String 参数值
345
- * @param {String} name 参数名
274
+ * 切换指定元素显示,同级其余元素隐藏;
275
+ * 如果指定样式类名,则当前原始添加样式类,其余元素移除样式类
276
+ * @param {Element} element 标签元素
277
+ * @param {String} selector 筛选字符
278
+ * @param {String} className 类名称
279
+ * @return {Element} 显示的单个/多个标签元素
346
280
  */
347
- function query(url, name) {
281
+ function toggle(element, selector, className) {
348
282
  if (arguments.length == 1) {
349
- // getQueryString(name)
350
- name = url;
351
- // window.location.search 返回从问号?开始的URL查询部分
352
- // ?name1=value1&name2=value2
353
- url = window.location.search;
354
- }
283
+ // toggle(element)
284
+ element = select(element);
285
+ } else
355
286
  if (arguments.length == 2) {
356
- // getQueryString(url, name)
357
- let index = url.indexof("?");
358
- if (index > 0) {
359
- url = url.substring(index);
360
- } else {
361
- return null;
362
- }
287
+ // toggle(element,selector)
288
+ // toggle(element,className)
289
+ element = select(element, selector);
290
+ } else
291
+ if (arguments.length == 3) {
292
+ // toggle(element,selector,className)
293
+ element = select(element, selector);
294
+ } else {
295
+ return;
363
296
  }
364
-
365
- if (url) {
366
- let start = url.indexOf(name);
367
- if (start >= 0) {
368
- start += name.length;
369
- if (url.charAt(start) == '=') {
370
- start++;
371
- let end = url.indexOf('&', start);
372
- if (end >= 0) {
373
- return url.substring(start, end);
297
+ if (element) {
298
+ const parent = element.parentElement;
299
+ if (className) {
300
+ for (let i = 0; i < parent.children.length; i++) {
301
+ parent.children[i].classList.remove(className);
302
+ if (element == parent.children[i]) {
303
+ parent.children[i].classList.add(className);
304
+ }
305
+ }
306
+ } else {
307
+ for (let i = 0; i < parent.children.length; i++) {
308
+ if (element == parent.children[i]) {
309
+ show(parent.children[i]);
310
+ } else {
311
+ hide(parent.children[i]);
374
312
  }
375
- return url.substring(start);
376
313
  }
377
314
  }
378
315
  }
379
- return null;
316
+ return element;
380
317
  }
381
318
 
382
319
  // 默认转换函数
@@ -384,16 +321,34 @@ function defaultConverter(element, parameter, name) {}
384
321
 
385
322
  /**
386
323
  * 从指定元素获取值以JSON对象返回{name:value}
387
- * @param {Element} element 元素
324
+ * @param {Element} element 标签元素
325
+ * @param {String} selector 筛选字符
388
326
  * @param {Function} converter 转换
389
- * @returns {Object} {name1:value1,name2:value2,...}
327
+ * @return {Object} {name1:value1,name2:value2,...}
390
328
  */
391
- function gets(element, converter = defaultConverter) {
392
- if (element) {
393
- if (element.trim) {
394
- element = selects(element);
329
+ function gets(element, selector, converter = defaultConverter) {
330
+ if (arguments.length == 1) {
331
+ // gets(element)
332
+ element = select(element);
333
+ } else
334
+ if (arguments.length == 2) {
335
+ // gets(element,selector)
336
+ // gets(element,converter)
337
+ if (selector.trim) {
338
+ element = select(element, selector);
339
+ } else {
340
+ element = select(element);
341
+ converter = selector;
395
342
  }
396
- if (Array.isArray(element)) {
343
+ } else
344
+ if (arguments.length == 3) {
345
+ // gets(element,selector,converter)
346
+ element = select(element, selector);
347
+ } else {
348
+ return;
349
+ }
350
+ if (element) {
351
+ if (element.length) {
397
352
  let parameter = {},
398
353
  parameters = new Array();
399
354
  for (let i = 0; i < element.length; i++) {
@@ -411,39 +366,41 @@ function gets(element, converter = defaultConverter) {
411
366
  }
412
367
  }
413
368
  }
369
+
414
370
  /**
415
- * 从指定JSON设置元素值,以name属性作为标识
416
- * @param {Element} element 元素
417
- * @param {Object} parameter 对象
418
- * @param {Function} converter 转换
419
- * @returns {Element} element
371
+ * 从指定JSON对象设置元素值,以name属性作为标识
372
+ * @param {Element} element 标签元素
373
+ * @param {String} selector 筛选字符
374
+ * @param {Object} parameter 数据对象
375
+ * @param {Function} converter 数据转换
376
+ * @return {Element} 设置的单个/多个标签元素
420
377
  */
421
- function sets(element, parameter, converter = defaultConverter) {
422
- if (element) {
423
- if (element.trim) {
424
- // 元素选择字符串
425
- element = selects(element);
426
- if (element.length == 0) {
427
- return null;
428
- } else
429
- if (element.length == 1) {
430
- element = element[0];
431
- } else {
432
- // 多个匹配元素
433
- }
378
+ function sets(element, selector, parameter, converter = defaultConverter) {
379
+ if (arguments.length == 2) {
380
+ // sets(element,parameter)
381
+ element = select(element);
382
+ parameter = selector;
383
+ } else
384
+ if (arguments.length == 3) {
385
+ // sets(element,selector,parameter)
386
+ // sets(element,parameter,converter)
387
+ if (selector.trim) {
388
+ element = select(element, selector);
389
+ } else {
390
+ element = select(element);
391
+ converter = parameter;
392
+ parameter = selector;
434
393
  }
435
-
394
+ } else
395
+ if (arguments.length == 4) {
396
+ // sets(element,selector,parameter,converter)
397
+ element = select(element, selector);
398
+ } else {
399
+ return;
400
+ }
401
+ if (element) {
436
402
  if (parameter) {
437
403
  if (Array.isArray(parameter)) {
438
- // if (element.nodeType) {
439
- // if (element.childElementCount) {
440
- // element = element.children;
441
- // } else {
442
- // // ???
443
- // return null;
444
- // }
445
- // }
446
-
447
404
  let i = 0;
448
405
  // 利用ENO_SET记录并判定是否首次
449
406
  if (element.ENO_SETS) {
@@ -572,6 +529,7 @@ function sets(element, parameter, converter = defaultConverter) {
572
529
  }
573
530
  }
574
531
  }
532
+
575
533
  /**
576
534
  * 获取元素值
577
535
  * <input name="AAA" value="123"/>
@@ -601,6 +559,7 @@ function get(element, parameter, converter) {
601
559
  }
602
560
  }
603
561
  }
562
+
604
563
  /**
605
564
  * 设置元素值
606
565
  * <input name="AAA" value="123"/>
@@ -630,6 +589,7 @@ function set(element, parameter, converter) {
630
589
  }
631
590
  }
632
591
  }
592
+
633
593
  /**
634
594
  * 根据名称获取对象值
635
595
  * @param {Object} o 对象
@@ -657,6 +617,7 @@ function vale(o, name) {
657
617
  }
658
618
  return o;
659
619
  }
620
+
660
621
  /**
661
622
  * 根据名称设置对象值
662
623
  * @param {Object} o
@@ -678,6 +639,7 @@ function valu(o, name, value) {
678
639
  o[name[i]] = value;
679
640
  return o;
680
641
  }
642
+
681
643
  /**
682
644
  * 转换为字符串值
683
645
  * @param {Object} o
@@ -692,8 +654,48 @@ function text(o) {
692
654
  }
693
655
  return "";
694
656
  }
657
+
658
+ /**
659
+ * 绑定事件
660
+ * @param {Element} element 标签元素
661
+ * @param {String} selector 筛选字符
662
+ * @param {String} eventName 事件名称
663
+ * @param {Function} listener 事件处理
664
+ * @example bind(element,eventName,listener);
665
+ * @example bind(element,selector,eventName,listener);
666
+ * @return {Element} 绑定事件的标签元素
667
+ */
668
+ function bind(element, selector, eventName, listener) {
669
+ if (arguments.length == 3) {
670
+ // bind(element,eventName,listener);
671
+ element = selects(element);
672
+ listener = eventName;
673
+ eventName = selector;
674
+ } else
675
+ if (arguments.length == 4) {
676
+ // bind(element,selector,eventName,listener);
677
+ element = selects(element, selector);
678
+ } else {
679
+ return;
680
+ }
681
+ if (element) {
682
+ if (element.length) {
683
+ for (let i = 0; i < element.length; i++) {
684
+ element[i].addEventListener(eventName, listener);
685
+ }
686
+ } else {
687
+ element.addEventListener(eventName, listener);
688
+ }
689
+ }
690
+ return element;
691
+ }
692
+
695
693
  /**
696
694
  * 根据事件或元素获取由sets关联的实体对象
695
+ * @example entity(event);
696
+ * @example entity(element);
697
+ * @example entity(element,selector);
698
+ * @return {Object} 标签元素关联的数据对象
697
699
  */
698
700
  function entity(e, selector) {
699
701
  if (arguments.length == 1) {
@@ -722,6 +724,7 @@ function entity(e, selector) {
722
724
  }
723
725
  return null;
724
726
  }
727
+
725
728
  /**
726
729
  * 根据事件或元素获取属性指定的动作
727
730
  * @param {Event} e
@@ -744,9 +747,11 @@ function action(e, a) {
744
747
  }
745
748
  return false;
746
749
  }
750
+
747
751
  /**
748
752
  * 根据事件获取绑定实体的元素
749
753
  * @param {Event} e
754
+ * @return {Element} 标签元素关联的数据对象
750
755
  */
751
756
  function element(e) {
752
757
  if (e && e.target) {
@@ -767,36 +772,41 @@ function element(e) {
767
772
  }
768
773
 
769
774
  /**
770
- * 2024-6-24
775
+ * 读取 URL 中的 Query String 参数值
776
+ * @param {String} name 参数名
777
+ * @return {String} 参数值
771
778
  */
772
- function date() {
773
- const now = new Date();
774
- const year = now.getFullYear();
775
- const month = (now.getMonth() + 1 /*月份从0开始,需要加1*/ ).toString().padStart(2, '0');
776
- const day = (now.getDate()).toString().padStart(2, '0');
777
- return `${year}-${month}-${day}`;
778
- }
779
+ function query(url, name) {
780
+ if (arguments.length == 1) {
781
+ // getQueryString(name)
782
+ name = url;
783
+ // window.location.search 返回从问号?开始的URL查询部分
784
+ // ?name1=value1&name2=value2
785
+ url = window.location.search;
786
+ }
787
+ if (arguments.length == 2) {
788
+ // getQueryString(url, name)
789
+ let index = url.indexof("?");
790
+ if (index > 0) {
791
+ url = url.substring(index);
792
+ } else {
793
+ return null;
794
+ }
795
+ }
779
796
 
780
- /**
781
- * 10:28:12
782
- */
783
- function time() {
784
- const now = new Date();
785
- const hours = now.getHours();
786
- const minutes = now.getMinutes();
787
- const seconds = now.getSeconds();
788
- return `${hours}:${minutes}:${seconds}`;
789
- }
790
- /**
791
- * 2024-6-24 10:28:12
792
- */
793
- function datetime() {
794
- const now = new Date();
795
- const year = now.getFullYear();
796
- const month = now.getMonth() + 1 /*月份从0开始,需要加1*/ ;
797
- const day = now.getDate();
798
- const hours = now.getHours();
799
- const minutes = now.getMinutes();
800
- const seconds = now.getSeconds();
801
- return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
797
+ if (url) {
798
+ let start = url.indexOf(name);
799
+ if (start >= 0) {
800
+ start += name.length;
801
+ if (url.charAt(start) == '=') {
802
+ start++;
803
+ let end = url.indexOf('&', start);
804
+ if (end >= 0) {
805
+ return url.substring(start, end);
806
+ }
807
+ return url.substring(start);
808
+ }
809
+ }
810
+ }
811
+ return null;
802
812
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joyzl/eno",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Easy Node Object",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/publish.cmd DELETED
@@ -1 +0,0 @@
1
- npm publish --access public