2015-09-06 7 views
0

у меня есть 3 текстовых поля. Первый пользователь вводит строку. Во втором поле они входят в первую строку, которую они хотят заменить. Третье текстовое поле - это строка, которая должна выполнять замену.Заменить часть строки другой строкой javascript

Я пытаюсь использовать метод replace(), но я не думаю, что я использую его правильно, или я должен использовать что-то еще.

HTML:

 <form> 
      Enter a string:<input type="text" id="user_string"><br> 

      Enter portion of previous string to be replaced: <input type="text" id="replace_string"><br> 

      Enter new string: <input type="text" id="add_string"><br> 

      <input type="button" value="Execute" onclick="BaitAndSwitch()"><br> 

      Result: <input type="text" id="req_4_results"><br> 
     </form> 

Javascript:

function BaitAndSwitch(){ 
    // create variables for the user entered data 
    var UserString = document.getElementById("user_string").value; 

    var ReplaceString = document.getElementById("replace_string").value; 

    var AddString = document.getElementById("add_string").value; 

    var Results = UserString.replace(ReplaceString, Addstring); 

    if (UserString.indexOf(ReplaceString) > -1) { 
     Document.getElementById("req_4_results").value = Results; 
    } 
    else{ 
     alert("Something went wrong! Please check the data you entered.") 
    } 
} 

Я знаю, что я делаю что-то неправильно. Может быть, использование переменных в методе .replace()? Или, может быть, если ... используя строку indexOf?

Я по существу пытался установить его там, где он будет проверять UserString со значением ReplaceString, и если он будет соответствовать, он затем выполнит метод replace() и покажет результаты для данного элемента HTML. Иначе, если ReplaceString не соответствует какой-либо вещи из UserString, она предупреждает пользователя о том, что что-то не так, и проверить его.

+1

'document.getElementById («req_4_results»)' должен быть ' document.getElementById ("req_4_results") '. JavaScript - это Case SensiTiVe.Также обратите внимание, что ваша функция заменит только первое вхождение _needle_ ('ReplaceString'). Если вы хотите заменить все из них, вы должны [использовать регулярное выражение] (http://stackoverflow.com/a/494046/1913729). – blex

+0

Несвязанные, но в общем случае нефункциональные переменные должны быть более общими, например, 'userString',' replaceString' и т. Д. Имена капитализированных переменных, по соглашению, предназначены для функций, используемых для создания объектов через 'new'. Следующие соглашения помогают разработчикам JS думать о вашем коде. –

+0

@DaveNewton спасибо за эту информацию, я не знал, что – kronis72

ответ

3

JavaScript is cAsE SeNsItIvE. Обратите внимание, что Document не совпадает с объектом document. Пожалуйста, используйте приведенную ниже строку:

document.getElementById("req_4_results").value = Results; 

Ах да, как отметил blex, у вас есть еще опечатку тоже:

var Results = UserString.replace(ReplaceString, Addstring); 
//-------------------------------------------------^ should be S 

Дополнительная информация: В консоли, если вы пытаетесь как, увидеть результат вы получите:

typeof Document 
// "function" 
typeof document 
// "object" 

на стороне записки, пожалуйста, п ot использовать такие соглашения об именах. Похоже, вы переходите с Visual Basic.

+0

Спасибо, Это было первое, что я просмотрел, но искал, но, похоже, я все еще забыл чувствительные к регистру ошибки. Я также не знал об условиях соглашения об именах. – kronis72

1

Обратите внимание, что метод replace() не изменяет строку, на которую вы ее называете.

В вашей строке кода:

var Results = UserString.replace(ReplaceString, Addstring); 

Значение UserString не будет изменено в результате того, что называется replace() на нем.

В вашем условном операторе:

UserString.indexOf(ReplaceString) > -1 

Если это правда, то это означает, что UserString все еще содержит, по меньшей мере, один экземпляр ReplaceString внутри него.
Это имеет смысл, потому что вы бы не модифицировали UserString. Если вы хотите, чтобы убедиться, что Results больше не имеет каких-либо возникновение ReplaceString, то вы хотите, чтобы бросить ошибку, только если следующее условие:

Results.indexOf(ReplaceString) > -1 
+0

Если метод замены не изменяет строку, я ее вызываю. Тогда как его заменить. скажем, они входят в «собаку». и они хотят изменить «sat» на «run», чтобы они вошли в «sat» для add_string. не заменит ли метод замены «сидел» на «запустить», – kronis72