2013-07-30 3 views
1

Я пытаюсь найти все вхождения строки в строку не изменится, и заменить егоreplaceAll ничего

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

Это то, что я использую (нашел его здесь, в одном из вопросы):

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); 
}; 

Ничто фактически не меняется. Любая идея почему?

+1

'replaceAll' возвращает результат, вы должны назначить его где-нибудь. – Barmar

ответ

4

.replaceAll() возвращает новый экземпляр модифицированной строки, он не изменяет существующую ссылку на строку. Так что, если вы хотите обратиться к модифицированной строке, то вам необходимо сохранить значение, возвращаемое .replaceAll()

вам нужно использовать

e.innerHTML = xmlhttp.responseText.replaceAll(search_string.value, "<span class=\"green\">"+search_string.value+"</span>"); 
+0

кодирование с лихорадкой со стола постоянно :) Спасибо и извините за вопрос новобранец. Я действительно болен, хотя; –

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>"); 
0

Попробуйте использовать J-запроса:

$(' 
//Code to find strings 
').replaceWith('<span class="blue_color_text">matched_string</span>');