Я искал ряд похожих проблем, но, похоже, не смог сделать эту работу.

Вот мой HTML:

 <div class="main">
    <p class="nameLink">name1</p>
    <p class="someClass"></p>
  </div>

  <div class="main">
    <p class="nameLink">name2</p>
    <p class="someClass"></p>
  </div>

Я хотел бы удалить div, который содержит определенное имя, например "name2". HTML в настоящее время добавляется из файла JavaScript, а имена происходят из переменной.

Вот что я попробовал в javascript:

var deleteName = "name2";
    $('.main p.nameLink').each(function() {
        if ($(this).text() == deleteName) {                    
          $('.main').has('p:contains(deleteName)').remove()
            return;
      }
    });

Я просто не могу удалить div, содержащий конкретный текст. Ваша помощь приветствуется. Благодарю.

1
marcusk7 10 Янв 2017 в 00:25

3 ответа

Лучший ответ

Ваш код немного излишний, вы можете использовать только селекторы для его удаления, бесполезно зацикливать его с помощью each (), если только вы не хотите выполнять определенные действия с элементом p:

var deleteName = "name2";
$('.main').has('p.nameLink:contains(' + deleteName + ')').remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="main">
  <p class="nameLink">name1</p>
  <p class="someClass"></p>
</div>

<div class="main">
  <p class="nameLink">name2</p>
  <p class="someClass"></p>
</div>
1
Kaddath 9 Янв 2017 в 21:41

Включая deleteName в ваши одинарные кавычки, он ищет p, который содержит буквальный текст "deleteName", а не "name2".

Попробуй это:

var deleteName = "name2";
    $('.main p.nameLink').each(function() {
        if ($(this).text() == deleteName) {                    
          $('.main').has('p:contains(' + deleteName + ')').remove();
            return;
        }
});

Возьмите пик в том, к чему фактически оценивает ваш код (закомментированная часть):

Ваш фрагмент .

  $('.main').has('p:contains(deleteName)').remove()
//$('.main').has('p:contains(deleteName)').remove()
//Searching for text: deleteName

< Сильный > Исправление:

  $('.main').has('p:contains(' + deleteName + ')').remove();
//$('.main').has('p:contains(name2)').remove();
//Searching for text: name2
2
Tyler Roper 9 Янв 2017 в 21:39

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

Вам нужно использовать конкатенацию строк. Например: 'string ' + 1 + ' something', выход 'string 1 something'.

Вот ваш код работает:

var deleteName = "name2";
$('.main p.nameLink').each(function() {
  if ($(this).text() == deleteName) {
    $('.main').has('p:contains(' + deleteName + ')').remove()
    return;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="main">
  <p class="nameLink">name1</p>
  <p class="someClass"></p>
</div>

<div class="main">
  <p class="nameLink">name2</p>
  <p class="someClass"></p>
</div>
0
Seth 9 Янв 2017 в 21:30