1

jsFiddle: http: //jsfiddle.net/WM6wG/

div内のテキストを置き換えようとしていますが、なぜ機能しないのか理解できないようです。

HTML:

<div class="text">abc</div>
<div class="text">foo</div>
<div class="text">bar</div>

jQuery:

var match = 'abc';
if ($('div.text:contains(match)')) {
    $('div.text').html(function(){
        $(this).replaceText(match, 'xyz');
    }
}

理想的には、期待される出力は次のようになります。xyz foo barしかし、それは残っていますがabc foo bar、何が間違っているのでしょうか。

4

4 に答える 4

7

コードにはいくつかの問題があります。

  1. variable の値ではなく、「一致」を検索していますmatch

  2. 次の行にif新しいセレクターがあるため、ステートメントは無意味です。div.textしたがって、いずれかの要素が一致する場合、コードは一致するすべての要素に対してこれを実行します。

  3. あなたのhtml()メソッドは何も返していません。

  4. replaceText()標準機能ではありません。これが自分で作成したカスタム関数でない限り、またはreplaceText() プラグインを使用している場合を除き、次のように置き換えますreplace()


var match = 'abc';
$("div.text:contains(" + match + ")").each(function(){
   var $this = $(this);
    $this.html(function(){
        return $this.html().replace(match, "xyz");
    });
});

ライブデモ: http://jsfiddle.net/wh7xn/


置き換えたい「abc」のインスタンスが複数ある場合は、正規表現を使用します。

var match = 'abc';
var re = new RegExp(match,"g");
$("div.text:contains(" + match + ")").each(function(){
   var $this = $(this);
    $this.html(function(){
        return $this.html().replace(re, "xyz");
    });
});

ライブデモ: http://jsfiddle.net/wh7xn/2/

于 2013-02-27T17:39:34.017 に答える
2

$('div.text:contains(match)')そうするとき、リテラル文字列 'match' を含む div を検索しています。

次のようにできます。$('div.text:contains(' + match + ')')

変数 match には、jquery セレクターにとって意味のあるもの ( ).

于 2013-02-27T17:39:30.600 に答える
1

更新されたフィドルを参照してください

$(document).ready(function(){
    var match = 'abc';
    if ($('div.text:contains('+match+')')) {
        $('div.text').html(function(){
            $(this).replaceText(match, 'xyz');
        });
    }
});

2つのこと!

  1. '('+match+')'
  2. html 呼び出しを閉じる関数の後にかっこを忘れました。
  3. 関数 replaceText の js ファイル (@Jasen ありがとう!)
于 2013-02-27T17:45:45.737 に答える
1

これはすべてを1行で行うようです(var宣言は数えません):

var match = 'abc';
$('div.text:contains(' + match + ')').text($('div.text:contains(' + match + ')').text().replace(match, 'xyz'));

jsFiddle の例

いいえ if ステートメントは必要ありませreplacereplaceText

複数の一致がある場合は、これを使用します。

var match = 'abc';
$('div.text:contains(' + match + ')').each(function () {
    $(this).text($(this).text().replace(match, 'xyz'));
});

jsFiddle の例

于 2013-02-27T17:48:22.867 に答える