2012-09-01 9 views
16

Próba zastąpienia wszystkich wystąpień # w łańcuchu zmienną. To nie działa, ale też nie przywraca żadnego błędu.JS zamień nie działa na łańcuchu

answer_form = '<textarea name="answer_#" rows="5"></textarea>'+ 
       '<input type="file" name="img_#" />'; 

question_num = 5; 

answer_form.replace(/#/g, question_num); 

Hafty pozostają.

Nie jestem pewien, czego mi brakuje?

Odpowiedz

63

.replace() zwraca nowy ciąg znaków (nie modyfikować istniejący ciąg), więc będzie trzeba:

answer_form = answer_form.replace(/#/g, question_num); 

Prawdopodobnie powinny również question_num jakiegoś napisu choć auto typu konwersje prawdopodobnie obsługiwać to za Ciebie.

przykład robocza: http://jsfiddle.net/jfriend00/4cAz5/

FYI, w JavaScript, ciągi są niezmienne - istniejący ciąg nie jest modyfikowany. Tak więc każda metoda, która wprowadza modyfikację ciągu (np. concat, replace, slice, substr, , toLowerCase, toUpperCase, itp.) ZAWSZE zwraca nowy ciąg.

6

Twój kod jest poprawny. Po prostu dodaj wartość do zmiennej następującej:

answer_form = '<textarea name="answer_#" rows="5"></textarea>'+ 
       '<input type="file" name="img_#" />'; 

question_num = 5; 

answer_form = answer_form.replace(/#/g, question_num);