0

我正在运行一个处理相当多案例的 switch 语句data-attributes

目前我坚持这个:

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;
 }

我想知道是否可以将所有data-属性组合成一个case,因为列出我遇到的所有可能选项有点“不通用”......

问题:
在 CSS 选择器中,我可以做一些像[class*=" ui-icon-"]. 我还可以使case值更通用吗?

谢谢!

4

3 回答 3

1

简单地解决了这样的事情:

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;
}
于 2013-09-16T13:24:13.550 回答
1

有点。您可以查看第一个字符是否为"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;
 }

这会将所有data-属性减少为一个可测试的值。请注意,您仍然使用完整attributesetters[].


或者由于您似乎已经在setters地图中拥有属性名称,您可以这样做:

if (setters[attribute]) {
    element.setAttribute(attribute, setters[attribute]);
}

switch似乎是多余的,因为您在执行此操作时几乎执行了相同的测试:

if (setters[attribute]) {

或者,如果您需要专门测试名称,那么...

if (setters.hasOwnProperty(attribute) && setters[attribute]) {
于 2013-09-16T13:24:29.717 回答
0

不,你不能做出“通用案例陈述”。但是您可以使用一组可能的值,然后检查该值是否是其中之一。

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]);
}
于 2013-09-16T13:29:56.663 回答