Skip to content

Commit

Permalink
更新到4.33版本
Browse files Browse the repository at this point in the history
- val()不再强制设定value属性,而是使用标准HTMLElement.value= "value"来设定绝大部分控件。如需强制设定value属性则需要改用attr()
- 现在val()可以批量设定属性了
- 当val()为获取模式时,一个元素直接返回值(和之前一样),多个元素则返回数组。如果你不确定选择的元素是否唯一,则需要自行判断(在获取值时选择器选择对象不唯一本来就是不规范的,除非特殊情况,例如要获取列表的所有选项的值)
- attr()获取模式更改为与val()获取模式相同
  • Loading branch information
velade authored May 8, 2024
1 parent 32b2542 commit 53fd84f
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 95 deletions.
10 changes: 7 additions & 3 deletions Help/Developer Manual.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

<head>
<meta charset="utf-8">
<title>VelFun4开发者手册 - 4.31</title>
<title>VelFun4开发者手册 - 4.33</title>
<link rel="stylesheet" href="help_data/styles/style.css?ver=2.50" />
<link rel="stylesheet" href="help_data/styles/w3.css" />
<script src="help_data/scripts/velfun4.js?ver=4.31" type="text/javascript"></script>
Expand Down Expand Up @@ -43,7 +43,7 @@
<body>
<div class="top">
<img src="help_data/images/Logo.png" alt="VelFun4" />
<div class="version">Ver 4.31</div>
<div class="version">Ver 4.33</div>
</div>
<div class="menu">
<div class="type">
Expand Down Expand Up @@ -1520,6 +1520,8 @@ <h2>JavaScript</h2>
<li>_(<元素>):velfun对象,需要注意的是它与jQuery对象不通用</li>
<li>属性名:要操作的属性名</li>
<li>属性值:字符串类型,可选参数,不传此参数时为读取属性值,传递空的字符串("")时,视为删除属性,传递非空字符串时设置属性值</li>
<li>设定值时将会同时设定选择器选中的所有元素</li>
<li>获取值时如果选择单一元素则直接返回值,如果选择多个元素则返回包含每一个元素的值的数组</li>
</ul>
</div>
</span>
Expand All @@ -1529,7 +1531,7 @@ <h2>JavaScript</h2>
<span class="title">值操作</span>
<span class="subtitle"><span>说明</span></span>
<span class="content">
用于velfun对象的值操作方法,获取或设定value属性值,内部通过attr实现,因此等效于_(<元素>).attr("value"[,<>]);
用于velfun对象的值操作方法,获取或设定value属性值<br><strong>从4.33版本开始统一使用HTMLElement.value = value;实现,不再操作attr设定和读取HTML属性,不具有value对象属性的元素不再能被读取,请转而使用attr("value")读取自定义的HTML中的value。</strong>
</span>
<span class="subtitle"><span>使用方法</span></span>
<span class="content">
Expand All @@ -1540,6 +1542,8 @@ <h2>JavaScript</h2>
<ul>
<li>_(<元素>):velfun对象,需要注意的是它与jQuery对象不通用</li>
<li>值:字符串类型,可选参数,不传此参数时为读取value值,传递值时设置value值</li>
<li>设定值时将会同时设定选择器选中的所有元素</li>
<li>获取值时如果选择单一元素则直接返回值,如果选择多个元素则返回包含每一个元素的值的数组</li>
</ul>
</div>
</span>
Expand Down
99 changes: 53 additions & 46 deletions Help/help_data/scripts/velfun4.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
/********************
腳本名:VelFun
版本號:4-4.31
版本號:4-4.33
通 道:Release
作 者:龍翔翎(Velade)
更新日期:2024-04-28
更新日期:2024-05-07
********************/
; (function (window, undefined) {
var isOffline = !location.origin.match(/^(http:|https:)\/\//);
var version = "4-4.31";
var version = "4-4.33";
var channel = "Release";
var author = "Velade";
var releaseDate = "2024-04-28";
var releaseDate = "2024-05-07";

/**
* @typedef {object} velfunEle VelFun元素
Expand Down Expand Up @@ -121,22 +121,29 @@
* @returns {velfunEle|string} 如果为设定则返回元素对象。如果为读取则返回属性值,返回的属性值一律为字符串类型
*/
velfun.fn.attr = function (attrname, attrvalue) {
var _this = this;
const _this = this;
if (_this.length == 0) return this;
if (!_this[0] || _this[0].nodeType == 3) return null;
if (attrvalue === undefined) {
return (_this[0].getAttribute) ? _this[0].getAttribute(attrname) : null;
} else {
for (var i = 0; i < _this.length; i++) {
let values = [];
_this.each((i, item) => {
if (item.nodeType == 3) return;
if (attrvalue === undefined) {
values.push((item.getAttribute) ? item.getAttribute(attrname) : null);
} else {
if (attrvalue === "") {
_this[i].removeAttribute(attrname);
item.removeAttribute(attrname);
} else if (attrvalue === attrname) {
_this[i].setAttribute(attrname, "");
item.setAttribute(attrname, "");
} else {
_this[i].setAttribute(attrname, attrvalue);
item.setAttribute(attrname, attrvalue);
}
}
return this;
})
if (attrvalue === undefined) {
if (values.length == 1) return values[0];
else if (values.length == 0) return null;
else return values;
} else {
return _this;
}
}
/**
Expand All @@ -155,31 +162,31 @@
*/
velfun.fn.val = function (value) {
if (this.length == 0) return this;
var _this = this;
if (_this[0].tagName.toLowerCase() == "v-select") {
if (value === undefined) {
return _("input[type='hidden']", _this).attr("value");
} else {
if (_this.hasAttr("readonly") || _this.hasAttr("disable")) {
return _this;
const _this = this;
let values = [];
_this.each((i, item) => {
if (_this[0].tagName.toLowerCase() == "v-select") {
if (value === undefined) {
values.push(_("input[type='hidden']", item).attr("value"));
} else {
if (!_this[0].hasAttr("readonly") && !_this[0].hasAttr("disable")) {
_("v-option[value='" + value + "']", item).trigger("click");
}
}
_("v-option[value='" + value + "']").trigger("click");
return _this;
}
} else if (_this[0].tagName.toLowerCase() == "input" || _this[0].tagName.toLowerCase() == "textarea") {
if (value === undefined) {
return _this[0].value;
} else {
this[0].value = value;
return _this;
if (value === undefined) {
values.push(item.value);
} else {
item.value = value;
}
}
})
if (value === undefined) {
if (values.length == 1) return values[0];
else if (values.length == 0) return null;
else return values;
} else {
if (value === undefined) {
return _this.attr("value");
} else {
_this.attr("value", value);
return _this;
}
return _this;
}
}
/**
Expand Down Expand Up @@ -1046,15 +1053,15 @@
})
}
let menu = new Object(menuids);
menu.add = function (selector, key, func, before="") {
menu.add = function (selector, key, func, before = "") {
let nowMenu = vel_dynamic_menus[this[0]][selector];
let newMenu = new Map();
for (const k in nowMenu) {
const v = nowMenu[k];
if(before != "" && before == k) {
newMenu.set(key,func);
if (before != "" && before == k) {
newMenu.set(key, func);
}
newMenu.set(k,v);
newMenu.set(k, v);
}
for (let i = 0; i < this.length; i++) {
const menuid = this[i];
Expand Down Expand Up @@ -2799,7 +2806,7 @@ _(function () {
if (_(velfun.nowinputbox).hasAttr('readonly') || _(velfun.nowinputbox).hasAttr('disable') || !velfun.nowinputbox) {
return false;
}
var keychar = _this.val();
var keychar = _this.attr("value");
var pos = velfun.nowinputbox.selectionStart;
if (keychar == "clear") {
velfun.nowinputbox.value = "";
Expand Down Expand Up @@ -2829,10 +2836,10 @@ _(function () {
var keys = _("v-key", _this.parent());
for (var i = 0; i < keys.length; i++) {
var key = _(keys[i]);
var isEn = /^[a-zA-Z]$/i.test(key.val());
var isEn = /^[a-zA-Z]$/i.test(key.attr("value"));
if (isEn) {
var normal = key.val().toLowerCase();
key.val(normal);
var normal = key.attr("value").toLowerCase();
key.attr("value", normal);
key.text(normal);
}
}
Expand All @@ -2841,10 +2848,10 @@ _(function () {
var keys = _("v-key", _this.parent());
for (var i = 0; i < keys.length; i++) {
var key = _(keys[i]);
var isEn = /^[a-zA-Z]$/i.test(key.val());
var isEn = /^[a-zA-Z]$/i.test(key.attr("value"));
if (isEn) {
var upper = key.val().toUpperCase();
key.val(upper);
var upper = key.attr("value").toUpperCase();
key.attr("value", upper);
key.text(upper);
}
}
Expand Down
99 changes: 53 additions & 46 deletions velfun4.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
/********************
腳本名:VelFun
版本號:4-4.31
版本號:4-4.33
通 道:Release
作 者:龍翔翎(Velade)
更新日期:2024-04-28
更新日期:2024-05-07
********************/
; (function (window, undefined) {
var isOffline = !location.origin.match(/^(http:|https:)\/\//);
var version = "4-4.31";
var version = "4-4.33";
var channel = "Release";
var author = "Velade";
var releaseDate = "2024-04-28";
var releaseDate = "2024-05-07";

/**
* @typedef {object} velfunEle VelFun元素
Expand Down Expand Up @@ -121,22 +121,29 @@
* @returns {velfunEle|string} 如果为设定则返回元素对象。如果为读取则返回属性值,返回的属性值一律为字符串类型
*/
velfun.fn.attr = function (attrname, attrvalue) {
var _this = this;
const _this = this;
if (_this.length == 0) return this;
if (!_this[0] || _this[0].nodeType == 3) return null;
if (attrvalue === undefined) {
return (_this[0].getAttribute) ? _this[0].getAttribute(attrname) : null;
} else {
for (var i = 0; i < _this.length; i++) {
let values = [];
_this.each((i, item) => {
if (item.nodeType == 3) return;
if (attrvalue === undefined) {
values.push((item.getAttribute) ? item.getAttribute(attrname) : null);
} else {
if (attrvalue === "") {
_this[i].removeAttribute(attrname);
item.removeAttribute(attrname);
} else if (attrvalue === attrname) {
_this[i].setAttribute(attrname, "");
item.setAttribute(attrname, "");
} else {
_this[i].setAttribute(attrname, attrvalue);
item.setAttribute(attrname, attrvalue);
}
}
return this;
})
if (attrvalue === undefined) {
if (values.length == 1) return values[0];
else if (values.length == 0) return null;
else return values;
} else {
return _this;
}
}
/**
Expand All @@ -155,31 +162,31 @@
*/
velfun.fn.val = function (value) {
if (this.length == 0) return this;
var _this = this;
if (_this[0].tagName.toLowerCase() == "v-select") {
if (value === undefined) {
return _("input[type='hidden']", _this).attr("value");
} else {
if (_this.hasAttr("readonly") || _this.hasAttr("disable")) {
return _this;
const _this = this;
let values = [];
_this.each((i, item) => {
if (_this[0].tagName.toLowerCase() == "v-select") {
if (value === undefined) {
values.push(_("input[type='hidden']", item).attr("value"));
} else {
if (!_this[0].hasAttr("readonly") && !_this[0].hasAttr("disable")) {
_("v-option[value='" + value + "']", item).trigger("click");
}
}
_("v-option[value='" + value + "']").trigger("click");
return _this;
}
} else if (_this[0].tagName.toLowerCase() == "input" || _this[0].tagName.toLowerCase() == "textarea") {
if (value === undefined) {
return _this[0].value;
} else {
this[0].value = value;
return _this;
if (value === undefined) {
values.push(item.value);
} else {
item.value = value;
}
}
})
if (value === undefined) {
if (values.length == 1) return values[0];
else if (values.length == 0) return null;
else return values;
} else {
if (value === undefined) {
return _this.attr("value");
} else {
_this.attr("value", value);
return _this;
}
return _this;
}
}
/**
Expand Down Expand Up @@ -1046,15 +1053,15 @@
})
}
let menu = new Object(menuids);
menu.add = function (selector, key, func, before="") {
menu.add = function (selector, key, func, before = "") {
let nowMenu = vel_dynamic_menus[this[0]][selector];
let newMenu = new Map();
for (const k in nowMenu) {
const v = nowMenu[k];
if(before != "" && before == k) {
newMenu.set(key,func);
if (before != "" && before == k) {
newMenu.set(key, func);
}
newMenu.set(k,v);
newMenu.set(k, v);
}
for (let i = 0; i < this.length; i++) {
const menuid = this[i];
Expand Down Expand Up @@ -2799,7 +2806,7 @@ _(function () {
if (_(velfun.nowinputbox).hasAttr('readonly') || _(velfun.nowinputbox).hasAttr('disable') || !velfun.nowinputbox) {
return false;
}
var keychar = _this.val();
var keychar = _this.attr("value");
var pos = velfun.nowinputbox.selectionStart;
if (keychar == "clear") {
velfun.nowinputbox.value = "";
Expand Down Expand Up @@ -2829,10 +2836,10 @@ _(function () {
var keys = _("v-key", _this.parent());
for (var i = 0; i < keys.length; i++) {
var key = _(keys[i]);
var isEn = /^[a-zA-Z]$/i.test(key.val());
var isEn = /^[a-zA-Z]$/i.test(key.attr("value"));
if (isEn) {
var normal = key.val().toLowerCase();
key.val(normal);
var normal = key.attr("value").toLowerCase();
key.attr("value", normal);
key.text(normal);
}
}
Expand All @@ -2841,10 +2848,10 @@ _(function () {
var keys = _("v-key", _this.parent());
for (var i = 0; i < keys.length; i++) {
var key = _(keys[i]);
var isEn = /^[a-zA-Z]$/i.test(key.val());
var isEn = /^[a-zA-Z]$/i.test(key.attr("value"));
if (isEn) {
var upper = key.val().toUpperCase();
key.val(upper);
var upper = key.attr("value").toUpperCase();
key.attr("value", upper);
key.text(upper);
}
}
Expand Down

0 comments on commit 53fd84f

Please sign in to comment.