Как сделать «простой» поиск и замену в jQuery? - PullRequest
4 голосов
/ 18 апреля 2011

Я новичок в jquery, и у меня возникают проблемы с выполнением того, что я считаю очень простой операцией поиска и замены.

Я хочу изменить текст внутри тегов "

". Так, например, я мог бы хотеть заменить " ваш заголовок " на " заголовок ".

  <div id="ValidationSummary">
    <ul>
        <li>
            <p>
                Please specify your title</p>
        </li>
        <li>
            <p>
                Please enter your first name</p>
        </li>
        <li>
            <p>
                Please enter your surname</p>
        </li>
    </ul>
    </div>

а вот jQuery, который ничего не делает:

$(function() {
    $('#ValidationSummary').text().replace("your title", "a title");
    $('#ValidationSummary').text().replace("first name", "christian name");
    $('#ValidationSummary').text().replace("your surname", "your last name");
};

Я действительно не вижу, что я делаю неправильно, есть идеи?

Пожалуйста, помогите, спасибо

Ответы [ 4 ]

15 голосов
/ 18 апреля 2011

Любые изменения строк в JS всегда производят новую строку , а не изменяют то, что там было.К счастью, jQuery позволяет легко извлекать и изменять текст одновременно:

$('#ValidationSummary p').text(function (i, old) {
     return old
         .replace('your title', 'a title')
         .replace('first name', 'christian name')
         .replace('your surname', 'your last name');
});

Объяснение:

  • return строка из .text() указывает jQuery заменить то, что было там (передано как old), на эту новую строку.

  • Поскольку replace() возвращает новую строку каждый раз, мы можем объединить несколько вызововвместе, так что нам нужен только один вызов .text() и оператор return.

  • Я использовал селектор '#ValidationSummary p', так как использование .text() или .html() будетзаменить все содержимое элемента, на котором он работает.

4 голосов
/ 18 апреля 2011
$(function() {
    var text = $('#ValidationSummary').text().replace("title", "your title"); // this will give the text after replacement, but it will not set the text to ValidationSummary
    $('#ValidationSummary').text(text);

    text = $('#ValidationSummary').text().replace("first name", "christian name");
    $('#ValidationSummary').text(text);

    text = $('#ValidationSummary').text().replace("your postcode", "your zipcode");
    $('#ValidationSummary').text(text);
};
1 голос
/ 18 апреля 2011

Вкл. JSFIDDLE .

$(function() {
    $('#ValidationSummary').html($('#ValidationSummary').html().replace("title", "Mister"));
    $('#ValidationSummary').html($('#ValidationSummary').html().replace("first name", "ABC"));
    $('#ValidationSummary').html($('#ValidationSummary').html().replace("surname", "XYZ"));       
});

Работает, но не думаю, что это надежно.

0 голосов
/ 18 апреля 2011

ПОПРОБУЙТЕ ЭТО ...

 $('#ValidationSummary').text($('#ValidationSummary').find('P').text().replace("title", "your title"));
 $('#ValidationSummary').text($('#ValidationSummary').find('P').text().replace("first name", "christian name"));
 $('#ValidationSummary').text($('#ValidationSummary').find('P').text().replace("your postcode", "your zipcode"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...