javascript: string.replace doesn't work
本问题已经有最佳答案,请猛点这里访问。
我在替换javascript/jquery中的字符串时遇到了一些问题。首先是代码:
HTML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <fieldset> <legend>Contact persons</legend> <fieldset id="cm_%email%"> <legend><span class="glyphicon glyphicon-circle-arrow-right"></span> %email%</legend> <label for="cm_%email_inputFirstname" class="col-sm-2 control-label">Firstname</label> <input type="text" class="form-control" id="cm_%email%_inputFirstname" value="%firstname%" placeholder="" required> <label for="cm_%email%_inputLastname" class="col-sm-2 control-label">Lastname</label> <input type="text" class="form-control" id="cm_%email%_inputLastname" value="%lastname%" placeholder="i. e. Max" required> <label class="col-sm-2 control-label">Actions</label> <button type="button" class="btn btn-warning">Create new password</button> <button type="button" class="btn btn-danger">Delete contact person</button> </fieldset> </fieldset> |
Javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | $(document).ready(function() { $('#cm_customerList').btsListFilter('#cm_customerSearchInput'); var editingArea = $('#cm_editingArea'); var contactPersons = $('#cm_contactPersons'); var contactPersonsTpl = contactPersons.html(); var alertArea = $('#cm_alertArea'); $('#cm_customerList > a').each(function() { $(this).click(function(e) { e.preventDefault(); $('#cm_customerList>a.active').removeClass('active'); $(this).addClass('active', 400); $('html').animate({ scrollTop: 0 }); alertArea.fadeOut(400, function() { alertArea.empty(); }); $.ajax({ type: 'GET', url: 'index.php?' + $(this).attr('data-ajaxUrl'), success: function(data) { res = $.parseJSON(data); editingArea.fadeOut(400, function() { $('#cm_inputName').val(res.name); $('#cm_inputStreet').val(res.street); $('#cm_inputPostalcode').val(res.postalcode); $('#cm_inputCity').val(res.city); $('#cm_inputCountry option[value="' + res.country + '"]').prop('selected', true); $('#cm_inputCountry').select2({ width: '100%' }); $('#cm_inputTutors option:selected').prop('selected', false); $.each(res.tutors, function(key, tutor) { $('#cm_inputTutors option[value="' + tutor.username + '"]').prop('selected', true); }); $('#cm_inputTutors').select2({ width: '100%' }); contactPersons.empty(); $.each(res.contactpeople, function(key, contactPerson) { contactPersons.append(contactPersonsTpl.replace('%email%', contactPerson)); }); editingArea.fadeIn(); }); }, error: function(xhr, ajaxOptions, thrownError) { //error handler } }); }); }); }); |
替换为"EDOCX1"(0)的零件根本不起作用。我尝试了所有不同类型的调试(日志、更改SUBSTR等)。没有机会。
但如果我在火狐控制台中写"EDOCX1"(1),它就会工作。
我做错什么了?
使用正则表达式…杰西德
默认情况下,替换将只更改第一次出现的模式。要替换字符串中的所有模式,需要使用带有g修饰符的正则表达式。
1 | contactPersons.append(contactPersonsTpl.replace(/%email%/g, contactPerson)); |
变量
1 2 | var contactPersonsTpl = $('#cm_contactPersons'); contactPersonsTpl.append(contactPersonsTpl.html().replace('%email%', contactPerson)); |