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