JQuery заменить строки во многих классах

javascript jquery dom

3206 просмотра

3 ответа

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

Пока у меня есть следующий код:

var el = $('div.myclass');
if(el  != null && el.html() != null )
{
    el.html(el.html().replace(/this/ig, "that"));
}

Это не работает, если есть более одного div с классом myclass. Если есть более одного div, то второй div заменяется содержимым первого! Это как если бы jQuery выполнял замену первого div, а затем заменял все классы myclassс результатом.

Кто-нибудь знает, как я должен это делать? Я думаю, что какой-то цикл по всем случаям mychassdiv - но мой JS немного слаб.

Автор: Mr. Flibble Источник Размещён: 12.11.2019 09:26

Ответы (3)


2 плюса

Решение

немного отличается от предыдущего ответа:

$('div.myclass').each(function(i, el) {
  if($(el).html() != "" ) {
    $(el).html($(el).html().replace(/this/ig, "that"));
  }
});

должно сработать

Автор: user180100 Размещён: 17.10.2009 11:59

3 плюса

Я думаю, что вы ищете что-то вроде этого:

$('div.myclass').each(function(){
    var content = $(this).html();
    content = content.replace(/this/ig,'that');
    $(this).html(content);
});

(не проверено)

Автор: Kristoffer Sall-Storgaard Размещён: 17.10.2009 11:57

0 плюса

Если содержимое ваших .myclassэлементов является чисто текстовым, вы можете сойти с рук. Но если они содержат другие элементы, ваша обработка регулярных выражений может изменить значения атрибутов по ошибке. Не обрабатывайте HTML с помощью регулярных выражений.

Также, записав в innerHTML/ html(), вы потеряете все несериализуемые данные в любом дочернем элементе, например, значения полей формы, обработчики событий и другие ссылки JS.

function isTextNode(){
    return this.nodeType===3; // Node.TEXT_NODE
}

$('div.myclass, div.myclass *').each(function () {
    $(this).contents().filter(isTextNode).each(function() {
        this.data= this.data.replace(/this/g, 'that');
    });
});
Автор: bobince Размещён: 17.10.2009 12:54
Вопросы из категории :
32x32