jQuery:从JSON-object为元素设置值

时间:2012-07-04 10:32:43

标签: javascript jquery

这可能很难解释,但我有 array 这样的对象:

myobject = {
  "class1"     : "value1",
  "class2"     : "value2",
  "class3"     : "value3",
  ...
}

我有脚本

$.each(myobject,function(i,val){
try{
    var it=0;
    $("." + i).each(function(it){
        switch($("." + i)[it].nodeName){
            case "SPAN":case "A":case "DIV":
                $("." + i).html(val);
            break;
            case "INPUT":
                switch($("." + i).attr("type")){
                    case "submit":
                        $("." + i).attr("value",val);
                    break;
                    case "text":case "password":case "email":
                        $("." + i).attr("placeholder",val);
                    break;
                }
            break;
            case "IMG":
                $("." + i).attr("alt",val);
                $("." + i).attr("title",val);
            break;
        }
    });
}catch(err){
    // Nothing
}
});

代码对spanadiv的影响应为:

Was:  <span class="class1"></span>
Is:   <span class="class1">value1</span>

以及input type=submit,其中应该是:

Was:  <input type="submit" class="class2" />
Is:   <input type="submit" class="class2" value="value2" />

spanadivinput[type=submit]的代码效果,但不会设置placeholder。为什么呢?

1 个答案:

答案 0 :(得分:1)

你正在尝试的是一种过于复杂的方式来做你想做的事情。只需使用jQuery选择器的强大功能,按标签类型进行过滤:

$.each(myobject, function(k, v){
    $('span.' + k + ', ' +
      'a.' + k + ', ' +
      'div.' + k).html(v);

    $('input.' + k + '[type="submit"]').val(v);

    $('input.' + k + '[type="text"], ' +
      'input.' + k + '[type="password"], ' +
      'input.' + k + '[type="email"]').attr('placeholder', v);

    $('img.' + k).attr('title', v)
                 .attr('alt', v);
});

修改

See demo

(也许你可以从演示和你的代码之间看出有什么不同以及为什么它不起作用)