заменить часть содержимого в переменной jquery на другую переменную
Мне необходимо в переменной заменить часть html-кода, равную другой переменной. Как это можно сделать?
Есть такой код (сильно мной измученный, вероятно):
if ($(this).data('clicked')) { // если не первый клик на эту строку tr
var form_trs = document.getElementById('rez').html;
var tr = $(this).closest("tr").get(0).outerHTML;
var rezult = form_trs.replace(tr,"");
document.getElementById('rez').html(rezult);
}
И мне необходимо в блоке кода условия удалить в значении переменной var form_trs все вхождения значения переменной var tr.
Моя попытка сделать так: var rezult = form_trs.replace(tr,""); результатов не принесла.
А как тут использовать .replaceWith я что-то не могу никак сообразить.
Буду очень благодарна за помощь. Спасибо!
Ответы (1 шт):
$ - функция, которая возвращает jQuery-объект с полезными методами. .html() — метод jQuery (который нужно вызывать, со скобками), он не будет работать для document.getElementById('rez'). Но т.к. вы не вызвали() метод, а только указали его имя, document.getElementById('rez').html не выдал ошибку, а молча вернул undefined, который попал в переменную form_trs.
А replace в вашем случае заменяет только первое совпадение. Чтобы заменить всё, ему нужен флажок "g" - global.
var form_trs = $('#rez').html();
var tr = $(this).closest("tr").get(0).outerHTML;
var reg = new RegExp( tr, "g" );
var result = form_trs.replace( reg, "" );
$('#rez').html(result);
P.s. $("#rez").html() ←→ document.getElementById("rez").innerHtml
Но, <tr></tr> и <tr> /перенос строки/ </tr> — это не одно и то же. Если HTML добавляется динамически, скриптом, и везде с одинаковыми пробелами / переносами строк, replace сойдет. Но было бы грамотнее найти другую общую деталь для этих tr (класс / содержимое их ячеек?) и фильтровать таблицу по этим показателям.