jQuery:从 JSON 对象为元素设置值

jQuery: set value for element from JSON-object

本文关键字:元素 设置 对象 JSON jQuery      更新时间:2023-09-26

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

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

你正在尝试的是一种过于复杂的方法来做你想做的事情。 只需利用 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);
});

编辑:

查看演示

(也许你可以通过查看演示和你的代码来弄清楚有什么不同以及为什么它不起作用)