Добавить класс в ячейку таблицы, если другая ячейка содержит значение

#javascript #html #wordpress

#javascript #HTML #wordpress

Вопрос:

Я хотел бы добавить с помощью javascript класс в ячейку таблицы, если другая ячейка в другом столбце содержит определенное значение. Я использую плагин для создания таблицы, а данные поступают из файла JSON, поэтому я не могу редактировать HTML-код таблицы.

Например, если ячейка в столбце «Компания» содержит «Эрнст Гендель», я хотел бы добавить класс .custom-class в другую ячейку в той же tr ячейке, в моем случае в ячейку «Австрия» в столбце Страна.

Что я пробовал, так это:

 $('tr').each(function(){
   if($('td:contains("Ernst Handel")', this).length amp;amp; $('td:contains("Austria")', this).length){       
        alert('here');
        $(this).addClass('custom-class');
    }
});
  

Вот пример:

 <table>
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Centro comercial Moctezuma</td>
    <td>Francisco Chang</td>
    <td>Mexico</td>
  </tr>
  <tr>
    <td>Ernst Handel</td>
    <td>Roland Mendel</td>
    <td>Austria</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>Helen Bennett</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Laughing Bacchus Winecellars</td>
    <td>Yoshi Tannamuri</td>
    <td>Canada</td>
  </tr>
  <tr>
    <td>Magazzini Alimentari Riuniti</td>
    <td>Giovanni Rovelli</td>
    <td>Italy</td>
  </tr>
</table>
  

CSS

 table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}

tr:nth-child(even) {
  background-color: #dddddd;
}

.custom-class {
  border: 1px solid red;
}
  

здесь jsFiddle

Заранее большое спасибо

Ответ №1:

В этой строке:

 $(this).addClass('custom-class');
  

this указывает на всю строку, а не на td , поэтому в основном вы добавляете имя класса к tr элементу. Если ячейка, которую вы хотите выбрать, всегда находится в третьем столбце, как в вашем примере, то один из способов настроить на нее таргетинг — использовать nth-child :

 $(this).find("td:nth-child(3)").addClass('custom-class');
  

 $('tr').each(function(){
   if($('td:contains("Ernst Handel")', this).length amp;amp; $('td:contains("Austria")', this).length){       
        alert('here');
        $(this).find("td:nth-child(3)").addClass('custom-class');
    }
});  
 table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}

tr:nth-child(even) {
  background-color: #dddddd;
}

.custom-class {
  border: 1px solid red;
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Centro comercial Moctezuma</td>
    <td>Francisco Chang</td>
    <td>Mexico</td>
  </tr>
  <tr>
    <td>Ernst Handel</td>
    <td>Roland Mendel</td>
    <td>Austria</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>Helen Bennett</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Laughing Bacchus Winecellars</td>
    <td>Yoshi Tannamuri</td>
    <td>Canada</td>
  </tr>
  <tr>
    <td>Magazzini Alimentari Riuniti</td>
    <td>Giovanni Rovelli</td>
    <td>Italy</td>
  </tr>
</table>