1

入力 ID の属性の特定の部分と each() 内の属性のラベルを置き換えようとしています。ただし、レンダリングを確認すると、入力 id の属性のみが id="something_else_[name]" に変更されていますが、属性のラベルは for="id_target_[name]" のまま変更されていません。

私は何を間違っていますか?

jQuery:

$(window).bind('load', function() {
    $('.target').each( function() { 
        $(this).html($(this).html().replace('id_target','something_else'));
    });
});

マークアップ:

<div class="target">
<input id="id_target_Bob" type="checkbox">
<label for="id_target_Bob">Target Bob</label>
</div>

結果:

<div class="target">
<input id="something_else_Bob" type="checkbox">
<label for="id_target_Bob">Target Bob</label> <!-- why is this left unchanged? -->
</div>
4

4 に答える 4

5

.replace検索文字列の最初のインスタンスのみを置き換えます。すべてのインスタンスを置き換える場合は、g(グローバル)フラグを指定して正規表現を使用する必要があります。

.replace(/id_target/g, 'something_else')

http://jsfiddle.net/ExplosionPIlls/cV6pw/

于 2013-02-08T06:23:51.840 に答える
3

属性を更新するだけです。これにより、ターゲットdiv内のすべての入力タグとラベルタグが検索され、それらの属性が置き換えられます。

HTML:

<div class="target">
  <input id="id_target_Bob" type="checkbox">
  <label for="id_target_Bob">Target Bob</label>
</div>

Javascript:

$(document).ready(function () {
    $('div.target').each(function () {         
        $('input').attr('id', 'something_else');
        $('label').attr('for', 'something_else');
    });
});

ヒント:

パフォーマンスを向上させるには、常にクラスの前に所属するタグを付ける必要があります。jQueryで2番目に高速なセレクターは、ネイティブJavascriptメソッドにマップされるタグセレクターですgetElementsByTagName()

を使用する代わりに$('.target').each(function () {...$('div.target').each(function () {...

于 2013-02-08T06:31:35.150 に答える
2

正規表現gはここで必要なものです

これを試して

 $(this).html($(this).html().replace(/id_target/g,'something_else'));
于 2013-02-08T06:24:53.920 に答える
1

スクリプトに指示した最初の出現のみを置き換えるためです

/id_target/g最初のオカレンスだけでなく、見つかったすべてのオカレンスを置き換えるために使用する必要があります

于 2013-02-08T06:24:28.263 に答える