2012-11-27 120 views
0

這更是一個代碼美化的問題,但仍...優化jQuery代碼 - 重複件

我有這個網站:(縮短)

<div id="sablona" style="display:none;"> 
    <div style="position:relative;"> 
     <fieldset> 
      <img class="sm_kont" src="../../include/img/remove_16.png" title="Smazat kontakt" alt="Smazat kontakt" /> 
      <legend></legend> 
      <table> 
       <tr> 
        <td> 
         <label for="jmeno_n">jméno</label> 
         <input name="jmeno_n" id="jmeno_n" type="text" value="" /> 
        </td> 
        <td> 
         <label for="pohlavi_n">pohlaví</label> 
         <select name="pohlavi_n" id="pohlavi_n"> 
          <option value="0"></option> 
          <option value="m">muž</option> 
          <option value="z">žena</option> 
         </select> 
        </td> 
       </tr> 
       <tr> 
        <td colspan="4"> 
         <label for="adresa_n">adresa</label> 
         <textarea name="adresa_n" id="zpr_adresa_n" rows="3"></textarea> 
        </td> 
       </tr> 
      </table> 
     </fieldset> 
    </div> 
</div> 

,我要複製改變一些其關鍵屬性。這裏是我使用的代碼:

var count = 0; 

function pridat_kontakt() { 
    var novy_kontakt = $("#novy_kontakt").val(); 
    if (novy_kontakt.length == 0) alert("Typ kontaktu nemůže být prázdný!"); 
    else { 
     var kopie = $("#sablona").children().clone(true); 
     kopie.find("legend").text(novy_kontakt); 
     kopie.find("label, input, select, textarea").each(function() { 
      if (typeof $(this).attr("name") != 'undefined') { 
       if ($(this).attr("name").length > 0) { 
        var new = $(this).attr("name") + count; 
        $(this).attr("name", new); 
       } 
      } 
      if (typeof $(this).attr("for") != 'undefined') { 
       if ($(this).attr("for").length > 0) { 
        var new = $(this).attr("for") + count; 
        $(this).attr("for", new); 
       } 
      } 
      if (typeof $(this).attr("id") != 'undefined') { 
       if ($(this).attr("id").length > 0) { 
        var new = $(this).attr("id") + count; 
        $(this).attr("id", new); 
       } 
      } 
     }); 
     $("[name='fedit']").append(kopie); 
     $("#novy_kontakt").val(""); 
     count++; 
    } 
} 

一切工作正常,它只是看起來不太好。任何人都可以想出一種美化它的方法嗎?我的意思是.each()部分。

+2

'new'是一個關鍵字,並且不應該被用來作爲變量名。 – zzzzBov

回答

2

你可以聲明函數,並在各部分使用它:

var checkAttr = function(jelem, attrName) { 
    var attrValue = jelem.attr(attrName); 
    if (typeof attrValue != 'undefined' && attrValue.length > 0) { 
     var newAttr = attrValue + count; 
     jelem.attr(attrName, newAttr); 
    } 
} 
kopie.find("label, input, select, textarea").each(function() { 
     var jthis = $(this); 
     checkAttr(jthis, "name"); 
     checkAttr(jthis, "for"); 
     checkAttr(jthis, "id"); 
});