jQuery remove() для каждого класса if содержит текст

#jquery #if-statement #each #contains

#jquery #оператор if #каждый #содержит

Вопрос:

Попытка удалить то, что находится в классе ‘bnum’, ЕСЛИ заголовок (class name=’productnamecolor colors_productname’) содержит текст ‘True’.

В принципе, в приведенном ниже примере вы НЕ должны видеть никакого значения «Burkett Bucks» под «True Merchandiser Refrigerator», однако оно все равно должно быть во всех остальных:

 <table width="300px">
    <tr>
      <td width="100%" valign="top"><a class="productnamecolor colors_productname" href=""> Star Griddle</a></td>
    </tr>
    <tr>
      <td width="100%" valign="top"><table cellspacing="0" cellpadding="0" width="100%">
          <tbody>
            <tr>
              <td width="64%" valign="top"><font class="text colors_text rewardpoints"><span id="offers">Special Offers:</span><br>
                <div class="bbucks"><img src="http://bit.ly/ihYMFL" id="bucks"> Earn <span class="bnum">2343</span> Burkett Bucks</div>
                </font></td>
              <td align="right" width="36%"></td>
            </tr>
          </tbody>
        </table></td>
    </tr>
    <tr>
      <td width="100%" valign="top"><a class="productnamecolor colors_productname" href=""> True Merchandiser Refrigerator</a></td>
    </tr>
    <tr>
      <td width="100%" valign="top"><table cellspacing="0" cellpadding="0" width="100%">
          <tbody>
            <tr>
              <td width="64%" valign="top"><font class="text colors_text rewardpoints"><span id="offers">Special Offers:</span><br>
                <div class="bbucks"><img src="http://bit.ly/ihYMFL" id="bucks"> Earn <span class="bnum">2343</span> Burkett Bucks</div>
                </font></td>
              <td align="right" width="36%"></td>
            </tr>
          </tbody>
        </table></td>
    </tr>
    <tr>
      <td width="100%" valign="top"><a class="productnamecolor colors_productname" href="">Generic Something</a></td>
    </tr>
    <tr>
      <td width="100%" valign="top"><table cellspacing="0" cellpadding="0" width="100%">
          <tbody>
            <tr>
              <td width="64%" valign="top"><font class="text colors_text rewardpoints"><span id="offers">Special Offers:</span><br>
                <div class="bbucks"><img src="http://bit.ly/ihYMFL" id="bucks"> Earn <span class="bnum">2343</span> Burkett Bucks</div>
                </font></td>
              <td align="right" width="36%"></td>
            </tr>
          </tbody>
        </table></td>
    </tr>
    </table>
  

Проблема, с которой я сталкиваюсь, заключается в том, что он выполняет это для всех значений, я только хочу удалить значение под КАЖДЫМ заголовком, в котором есть слово ‘True’. Итак, я предполагаю, что что-то не так с моим КАЖДЫМ.

 $(document).ready(function() {    
    $(".colors_productname:contains('True')").each(function () {
        $('.bnum').remove(); });

});
  

Ответ №1:

вместо глобального селектора

 $('.bnum')
  

вам нужно использовать текущий контекст каждого метода в вашей функции, принимая во внимание, что база не находится в том же tr, что и цель, нам нужно будет выполнить небольшой обход Dom.

 $(".colors_productname:contains('True')").each(function () {
    $(this).closest('tr').next('tr').find('.bnum').remove(); });
  

Комментарии:

1. Это тоже не сработало, я думаю, что все они действительно действительны, к сожалению, ‘Title’ и класс ‘bnum’ находятся в отдельных ‘TR’. возможно, именно здесь мы сталкиваемся с проблемой

2. Ах, пропустил это, HTML-код становился довольно беспорядочным на моем дисплее. Обновлено, чтобы выполнить правильный обход Dom перед удалением.

Ответ №2:

разве это не должно быть $(this).find('.bnum').remove() или даже короче:
$(".colors_productname:contains('True') .bnum").remove()

Ответ №3:

Попробуйте это вместо:

 $(document).ready(function() {
    $(".colors_productname:contains('True')").each(function () {
        $(this).find('.bnum').remove(); });
});  
  

Комментарии:

1. В .each() вообще нет необходимости.