У меня есть следующий HTML, и я хочу заменить подчеркивания пробелами для всех тегов привязки, которые появляются внутри div с классом xyz

<div class="xyz">
  <b><a>Hello_1</a></b>
</div>
<div class="xyz">
   <b><a>Hello_2</a></b>
</div>

Следующее не работает?

$('.xyz').each(function() {
   var $this = $(this);

   $this.find('a').text().replace(/_/g, ' '));
});
0
adam78 4 Сен 2017 в 13:01

4 ответа

Лучший ответ

Нет проблем с регулярным выражением. Вы не обновляете текст в DOM. .text() дает textContent элемента, но не устанавливает его. Вы можете использовать text() следующим образом

$('.xyz a').text(function(i, text) {
    return text.replace(/_/g, ' ');
});
$('.xyz a').text(function(i, text) {
  return text.replace(/_/g, ' ');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="xyz">
  <b><a>Hello_1</a></b>
</div>
<div class="xyz">
  <b><a>Hello_2</a></b>
</div>
5
Tushar 4 Сен 2017 в 10:16

Вы забыли заменить текст, который вы изменили

$('.xyz').each(function() {
    $(this).find('a').each(function(){
       var newText = $(this).text().replace(/_/g, ' ');
       $(this).text(newText);
  });

});

отредактировано после комментариев

2
Stéphane Ammar 4 Сен 2017 в 10:25

Замените элемент dom после цикла.

$('.xyz').each(function() {
   var $this =  $(this).find('a');
   $this.text( $this.text().replace(/_/g, ' '));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="xyz">
  <b><a>Hello_1</a></b>
</div>
<div class="xyz">
   <b><a>Hello_2</a></b>
0
Shree 4 Сен 2017 в 10:14

Это должно быть ...

var newText = $this.find('a').text().replace(/_/g, ' '));
$(this).find('a').text(newText);

Это немного дорогой способ пройтись по поиску DOM в цикле. Вы можете перебрать и поместить все свои теги привязки в массив сначала, возможно, тоже в зависимости от количества тегов привязки.

0
Sean T 4 Сен 2017 в 10:08