0

これはコードの美化に関する質問ですが、それでも...

私はこのhtmlを持っています:(短縮)

<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() 部分を意味します。

4

1 に答える 1

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");
});
于 2012-11-27T16:36:13.123 に答える