JQuery найти и заменить текст, без идентификатора элемента - PullRequest
12 голосов
/ 28 февраля 2010

Я играю с поиском и заменой текста.

Единственная проблема, с которой я сталкиваюсь - это найти текстовую строку, которая не привязана к элементу с идентификатором. В противном случае это было бы легко.

Я пытаюсь что-то вроде этого:

$("*").each(function () {
    $(this).html(this.html().replace('Original Text','New Text'));
});

Не слишком хорошо работает.
Кто-нибудь сталкивался с этим раньше?

Кроме того, если у меня есть несколько слов или фраз, которые нужно найти и заменить, как это влияет на скорость / производительность браузера пользователя? Это боров памяти?

Ответы [ 5 ]

20 голосов
/ 28 февраля 2010
$("*").contents().each(function() {
    if(this.nodeType == 3)
        this.nodeValue = this.nodeValue.replace("old", "new");
});
6 голосов
/ 28 февраля 2010

Takpar, ваш код тоже работает.Похоже, что некоторые другие вещи перестают работать, но только те вещи, которые я тяну динамически.Например, когда я использую .ajax().Не уверен почему, но вот почему я столкнулся.Я протестирую больше.

В смежной теме работает код Gumbo:

$("*").each(function () {
    if ($(this).children().length == 0) {
        $(this).text($(this).text().replace('Subject:','Name:'));
    }
});

Единственное, с чем я сталкиваюсь, это замена текста, который загружается после загрузки страницы.

У меня есть некоторые функции javascript, которые отображают данные с сервера, но только после того, как страница загрузит все элементы.Например, пользователь выбирает значение из раскрывающегося списка, которое инициирует событие для загрузки списка продуктов из базы данных.

Я форматирую некоторые из этих продуктов следующим образом:

Granny Smith Apples
Price: x.xx per pound
Nutritional facts....

Iзахочет найти только слово «Price:» и заменить его на «Cost:».

Но, как я уже говорил, эти данные еще не были загружены.

Есть ли предел, с которым я должен жить?

4 голосов
/ 28 февраля 2010

почему бы вам просто не использовать:

$('body').html($('body').html().replace('Original Text','New Text'));
1 голос
/ 28 февраля 2010

Требуется селектор :contains(). http://api.jquery.com/contains-selector/

$("*:contains('Original Text')").each(...);
0 голосов
/ 20 декабря 2012
$("*").each(function () { 
if ($(this).children().length == 0){ 
     $(this).html($(this).html().replace(/Old String/g, "New String"));
}});
...