这可能很难解释,但我有 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
}
});
代码对span
,a
,div
的影响应为:
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" />
span
,a
,div
和input[type=submit]
的代码效果,但不会设置placeholder
。为什么呢?
答案 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);
});
修改强>
(也许你可以从演示和你的代码之间看出有什么不同以及为什么它不起作用)