1

文字列内の文字列のすべての出現箇所を見つけて、それを置き換えようとしています

<span class="blue_color_text">matched_string</span>

これは私が使用しているものです(質問の1つでここに見つかりました):

String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.replace(new RegExp(search, 'g'), replacement);
};

実際の実装は次のとおりです。

function showResult(str)
{
if (str.length == 0)
{ 
return;
}

if (window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}

xmlhttp.onreadystatechange = function() {

var e = document.getElementById("res_ls"); 

if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
xmlhttp.responseText.replaceAll(search_string.value, "<span class=\"green\">"+search_string.value+"</span>");
e.innerHTML = xmlhttp.responseText;
e.removeAttribute("class");
}
}

xmlhttp.open("GET","ajax.php?s="+str, true);
xmlhttp.send();
}

String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.replace(new RegExp(search, 'g'), replacement);
};

実際には何も変わっていません。理由はありますか?

4

3 に答える 3

4

.replaceAll()変更された文字列の新しいインスタンスを返しますが、既存の文字列参照は変更されません。したがって、変更された文字列を参照したい場合は、返された値を保存する必要があります.replaceAll()

使用する必要があります

e.innerHTML = xmlhttp.responseText.replaceAll(search_string.value, "<span class=\"green\">"+search_string.value+"</span>");
于 2013-07-30T03:22:59.827 に答える
0

JavaScript の文字列は不変であるためreplaceAll、文字列自体は変更されませんが、代わりに新しい文字列が返されます。

String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.replace(new RegExp(search, 'g'), replacement); // <--- HERE
};

replaceAll の戻り値を元の文字列に割り当てる必要があります。

xmlhttp.responseText = xmlhttp.responseText.replaceAll(search_string.value, "<span class=\"green\">"+search_string.value+"</span>");
于 2013-07-30T03:25:12.160 に答える