Javascript 如何为“客户”捆绑案例;数据-“;switch语句中的属性?
我正在运行一个switch语句,其中有相当多的案例处理Javascript 如何为“客户”捆绑案例;数据-“;switch语句中的属性?,javascript,variables,switch-statement,case,Javascript,Variables,Switch Statement,Case,我正在运行一个switch语句,其中有相当多的案例处理数据属性 目前,我被以下问题困扰: switch(attribute) { case "value": case "data-vv-validations": case "data-relation": case "data-tolerance": case "data-theme": case "type": case "readonly": case "size":
数据属性
目前,我被以下问题困扰:
switch(attribute) {
case "value":
case "data-vv-validations":
case "data-relation":
case "data-tolerance":
case "data-theme":
case "type":
case "readonly":
case "size":
if (setters[attribute]) {
element.setAttribute(attribute, setters[attribute]);
}
break;
}
我想知道是否有可能将所有数据-
属性合并到一个案例中,因为列出我遇到的所有可能选项有点“不通用”
问题:
在CSS选择器中,我可以做一些类似于[class*=“ui图标-”]
的事情。我是否可以使案例
值更通用
谢谢 简单地用以下方法解决:
var attributeSwitch = attribute.indexOf("data-") == 0 ? "data-*" : attribute;
case(attributeSwitch){
case "value":
case "data-*":
case "type":
case "readonly":
case "size":
if (setters[attribute]) {
element.setAttribute(attribute, setters[attribute]);
}
break;
}
有点。您可以查看第一个字符是否为“data-
,如果是,只需将这些字符用于开关即可
var a = attribute.slice(0, 5) === "data-" ? "data-" : attribute;
switch(a) {
case "value": case "data-": case "type": case "readonly": case "size":
if (setters[attribute]) {
element.setAttribute(attribute, setters[attribute]);
}
break;
}
这会将所有数据-
属性减少为单个可测试值。请注意,您仍然使用setters[]
的完整属性
或者,由于您似乎已经在setters
映射中拥有属性名称,您可以这样做:
if (setters[attribute]) {
element.setAttribute(attribute, setters[attribute]);
}
您的开关
似乎是多余的,因为您执行此操作时几乎执行了相同的测试:
if (setters[attribute]) {
或者如果您需要专门测试名称,那么
if (setters.hasOwnProperty(attribute) && setters[attribute]) {
不,你不能做“一般案例陈述”。
但您可以使用一个可能值的数组,然后检查该值是否为其中之一
function inArray(array, value) {
for(var i=0, len=array.length; i<len; i++) {
if(array[i] == value) {
return true;
}
}
return false;
}
var possibleValues = ["value",
"data-vv-validations",
"data-relation",
"data-tolerance",
"data-theme",
"type",
"readonly",
"size"];
if (setters[attribute] && inArray(possibleValues, attribute)) {
element.setAttribute(attribute, setters[attribute]);
}
函数数组(数组,值){
对于(var i=0,len=array.length;i@frequent:请参阅我的更新。您的switch
语句似乎有点多余。我确实有更多的情况需要解决run@frequent:哦,好的。那就更有意义了。我认为这不是一个好代码。它使用了一些偶然的模式(可能会随着时间的推移而改变)如果您认为其他解决方案增加了“太多的开销”,那么我建议更改您的html,为这些“特殊”节点添加一个属性:@jgroenen:描述一下您在一组标识符中所说的“意外模式(可能随时间变化)”是什么意思“您需要接受任何数据-*,或者您事先知道的其中一些数据?您到底想对这个开关盒做什么?您不能只保留开关盒而只执行setters[属性]检查?@jgroenen:no。我正在生成元素并设置属性。上面的开关用于所有需要逻辑的属性,例如输入是只读的
,还是选择了选项。请参阅