jquery найти и заменить текст, без идентификатора элемента

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

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

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

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

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

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

5 ответов


$("*").contents().each(function() {
    if(this.nodeType == 3)
        this.nodeValue = this.nodeValue.replace("old", "new");
});

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

по смежной теме работает код Гумбо:

$("*").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....

Я только хочу найти замену слова " цена: "и, возможно, заменить его на"стоимость:".

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

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


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

$('body').html($('body').html().replace('Original Text','New Text'));

вы хотите :contains() селектор. http://api.jquery.com/contains-selector/

$("*:contains('Original Text')").each(...);

$("*").each(function () { 
if ($(this).children().length == 0){ 
     $(this).html($(this).html().replace(/Old String/g, "New String"));
}});