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、のコードの効果は次adivようになります。

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" />

spanadivおよびのコード効果ですinput[type=submit]が、これは s を設定しません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 に答える