1

data_numberセレクターのクローンを作成しましたが、出力する前に、のすべてのインスタンスをに置き換えたいのdata_number + 1ですが、問題が発生しています。

誰かが私が間違っていることを教えてもらえますか?ありがとう。

var data_number = $('.data-fields').length, // The number of data rows
    data_row = $('.data-'+data_number),  // The last data row
    new_data_row = data_row.clone();        // A clone of the last data row

/** Replace all instances of the data_number with data_number + 1 */
???

/** Clear all of the input values in the clone */
$('input[type="text"]', new_data_row).val('');

/** Output the now clean cloned data row */
data_row.after(new_data_row);

たとえば、new_data_rowが元々-だった場合

<div class="data-5">
    <input name="data[5][label]" />
    <input name="data[5][budget]" />
</div>

私はそれが-に変更されたらいいのに

<div class="data-6">
    <input name="data[6][label]" />
    <input name="data[6][budget]" />
</div>
4

3 に答える 3

2

速くて汚い。DOM->html->置換->DOM。

var data_number = $('.data-fields').length, // The number of data rows
    data_row = $('.data-'+data_number),  // The last data row
    cloned_data = data_row.clone(),
    new_data_row,       // Raw html
    next_number = data_number + 1; 

cloned_data.find("input").val(""); //Clear inputs

new_data_row = cloned_data.wrap("<div/>").parent().html().replace(new RegExp(data_number + "", "gm"), next_number + "");

/** Output the now clean cloned data row */
data_row.after(new_data_row);
于 2012-11-20T16:23:48.150 に答える
0

文字列の末尾に文字通り1を追加する場合を除いて、文字列置換を使用する必要がありdata_number + 1ます。parseInt(data_number) + 1

于 2012-11-20T16:19:39.383 に答える
0

さて、ここでの答えは私が思っていたよりも長かったです。

また、これは、置き換える必要があることがわかっているすべての要素を手動で置き換えるためにのみ機能します。より良い方法がある場合は、共有してください。

アップデート

別の答えを受け入れたのは、それが私が望むものを正確に達成するためです。したがって、このコードは機能しますが、それをお勧めします。

$(document).ready(function(){

    var link = $('.add-data-link');     

    link.on('click', function(){

        var data_number = $('.data-fields').length, // The number of data rows
            next_number = data_number + 1,          // The next data number
            data_row = $('.data-'+data_number),     // The last data row
            new_data_row = data_row.clone(),        // A clone of the last data row
            class_name = 'data-'+data_number,       // The class of the cloned data
            new_class_name = 'data-'+next_number;   // The new class that will replace the cloned data

        /** Replace all instances of the 'data_number' with 'next_number' */
        var for_text, name_text;
        $(new_data_row).removeClass(class_name).addClass(new_class_name);
        $('label', new_data_row).each(function(){

            for_text = $(this).attr('for');
            for_text = for_text.replace(data_number, next_number);
            $(this).attr('for', for_text);

        });
        $('input', new_data_row).each(function(){

            name_text = $(this).attr('name');
            name_text = name_text.replace(data_number, next_number);
            $(this).attr('name', name_text);

        });

        /** Clear all of the input values in the clone */
        $('input[type="text"]', new_data_row).attr('value', '');

        /** Output the now clean cloned data row */
        data_row.after(new_data_row);

    });

});
于 2012-11-20T17:11:14.357 に答える