#jquery #text #replace #find
Вопрос:
Я пытаюсь заменить только текст «Номер продукта/Описание» на «Номер продукта». Вот строка кода:
<td><input type="checkbox" name="dessearch">amp;nbsp;Product Number/Description</td>
Я попытался сделать следующее, но это также удаляет входные данные:
$("#ordersearch-page #content table tr td").text(function () {
return $(this).text().replace("Product Number/Description", "test");
});
Любая помощь будет очень признательна!
Ответ №1:
Один из вариантов-заменить HTML, а не текст. Это сохранит <input>
элемент.
$("#ordersearch-page #content table tr td").html(function(i, oldhtml) {
return oldhtml.replace("Product Number/Description", "test");
});
Однако при этом также будут потеряны любые динамические изменения <input>
элемента, такие как введенное пользователем значение или прослушиватели событий.
Другой вариант-поместить текст во вложенный элемент, чтобы вы могли специально его настроить.
$("#ordersearch-page #content table tr td span").text(function(i, oldtext) {
return oldtext.replace("Product Number/Description", "test");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="ordersearch-page">
<div id="content">
<table>
<tr>
<td><input type="checkbox " name="dessearch "><span>amp;nbsp;Product Number/Description</span></td>
</tr>
</table>
</div>
</div>
Комментарии:
1. Первый вариант сработал как нельзя лучше! К сожалению, я не могу редактировать html непосредственно на этой странице, так что это отлично работает. Ваш второй вариант привел к хорошей альтернативе — созданию вложенного элемента с помощью jQuery (например, обертывание в промежуток), а затем нацеливание/замена того, что находится в промежутке, вместо этого.
Ответ №2:
Для достижения этой цели вы можете использовать contents()
метод для извлечения определенного текстового узла и обновления его nodeValue
, например:
$("table tr td").each((i, el) => {
let node = $(el).contents().filter((i, n) => n.nodeType === Node.TEXT_NODE amp;amp; n.nodeValue.trim() !== '')[0];
node.nodeValue = node.nodeValue.replace("Product Number/Description", "test");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td><input type="checkbox" name="dessearch">amp;nbsp;Foo</td>
</tr>
<tr>
<td><input type="checkbox" name="dessearch">amp;nbsp;Product Number/Description</td>
</tr>
<tr>
<td><input type="checkbox" name="dessearch">amp;nbsp;Bar</td>
</tr>
</table>
Комментарии:
1. Спасибо вам за вашу помощь!