2

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

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

span, a,的代码效果div应该是这样的:

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

对于inputwhere type=submit,应该是这样的:

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

、和的代码效果span,但这不会设置s。为什么?adivinput[type=submit]placeholder

4

1 回答 1

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

编辑:

看演示

(也许您可以通过查看演示和您的代码找出有什么不同以及为什么它不起作用)

于 2012-07-04T10:45:31.730 回答