处理具有属性的switch case的JavaScript替代方法

时间:2014-12-22 05:19:23

标签: javascript jquery html html5

我有像这样定义的HTML元素

<div id="Jacob" validation="required alpha-numeric"></div>
<div id="Peter" validation="required minlen:4 maxlen:20"></div>

在Javascript中,我正在解析和处理validation="property1 property2 ... propertyN",如下所示:

 // called from a foreach that uses split(' ')

 validate(type) {
     switch(type) {
        case "required":
            // ...
        break;
        case "alpha-numeric":
            // ...
        break;
     }
 }

我意识到使用这样的开关可能有点冗长和过时。

解析具有各自属性/值的参数的优雅方法是什么?

2 个答案:

答案 0 :(得分:2)

我不知道你认为switch陈述过时的印象。他们不是。

就您的具体情况而言,您可以使用.split(":")拆分各个部分,然后匹配:

function validate(type) {
    var parts = (type || "").split(":");

    switch(parts[0].toLowerCase()) {
        case "required":
            // ...
        break;
        case "alpha-numeric":
            // ...
        break;
        case "minlen":
            // validate against parts[1]
        break;
    }
 }

如果你想使用查找而不是switch,你可以这样做,但我说这只是一个偏好问题:

var validators = {
    "required": function (value) {
    },
    "alpha-numeric": function (value) {
    },
    "minlen": function (value, len) {
    }
};

function validate (value, type) {
    var parts = (type || "").split(":");

    var validator = validators[parts[0].toLowerCase()];

    if (validator) {
        var result = validator(value, parts[1]);
    }
 }

第二种方法的一个潜在好处是可以在运行时将新的验证器添加到validator对象,但是如果你想建立一个可插拔的系统,你可能想要更多的东西强大而不仅仅是一个可以任意修改的普通对象。

答案 1 :(得分:0)

你可以创建关键功能对的json。并使用您的类型选择功能并调用它。

    var objOfFunction = {};
objOfFunction["required"] = requiredFunction;
objOfFunction["alpha-numeric"] = alphanFunction;
function validate(type) {
     objOfFunction[type]();
 }

 function requiredFunction(){
 alert("required");
 }

  function alphanFunction(){
  alert("in alpha");
  }
 validate("required");
 validate("alpha-numeric");