Ваш цикл .item-name
предполагает, что их несколько, но затем снова выбирает .item-name, ожидая текстовых значений.
Вместо этого переберите родителей, затем найдите дочерние элементы для манипуляции, например:
$("table tbody tr").each(function() {
if ($(this).find(".item-name").text() == 'Chair' && $(this).find(".item-weight").text() >= 20.0) {
$(this).css("font-weight", "bold")
.css("background-color", "red");
} else {
$(this).css("font-weight", "normal");
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-xs-12">
<table class="table table-striped table-responsive">
<thead>
<tr>
<td colspan="8" class="room-report-heading-td">
<div class="room-report-heading">
<div class="each-room pull-left">
<span class="room-number">1.</span>
<span class="room-name">Room</span>
</div>
<div class="each-room-statistics pull-right">
<span class="room-stat">
1 items
•
5.0ft<sup>3</sup>
•
20.0lb
</span>
</div>
<br style="clear:both;">
</div>
</td>
</tr>
<tr class="columns-headings">
<th class="item-count">Count</th>
<th class="item-name">Name</th>
<th class="item-volume">Volume</th>
<th class="item-total-volume">Total Volume</th>
<th class="item-weight">Weight</th>
<th class="item-total-weight">Total weight</th>
</tr>
</thead>
<tbody>
<tr>
<td class="item-count"><span>1</span></td>
<td class="item-name"><span>Chair</span></td>
<td class="item-volume"><span>5.0</span></td>
<td class="item-total-volume"><span>5.0</span></td>
<td class="item-weight"><span>20.0</span></td>
<td class="item-total-weight"><span>20.0</span></td>
</tr>
<tr>
<td class="item-count"><span>1</span></td>
<td class="item-name"><span>Bed</span></td>
<td class="item-volume"><span>5.0</span></td>
<td class="item-total-volume"><span>5.0</span></td>
<td class="item-weight"><span>60.0</span></td>
<td class="item-total-weight"><span>20.0</span></td>
</tr>
</tbody>
</table>
Возможно, вы могли бы уточнить свое регулярное выражение, используемое с разделением вот так:
split("[^\\];")
Разделить все, что есть ";" но не если перед этим стоит "\". То же самое для тире:
split("[^\\]-")
Вам, вероятно, лучше всего будет выполнить отмену экранирования и разделение в одном проходе. Я знаю, что это неправильно с точки зрения разделения двух отдельных частей функциональности, но это позволяет избежать некоторых неудобных угловых случаев (представьте, например, "foo \; bar", где; следует за обратной косой чертой, но по-прежнему является разделителем).
Вот очень упрощенный код для синтаксического анализа - он предполагает, что любая обратная косая черта в основном означает «обрабатывать следующий символ как простой ввод», но это все.
import java.util.*;
public class Test
{
public static void main(String[] args)
{
List<String> parsed = parse(args[0]);
for (String x : parsed)
{
System.out.println(x);
}
}
public static List<String> parse(String text)
{
List<String> ret = new ArrayList<String>();
StringBuilder current = new StringBuilder();
boolean escaping = false;
for (int i=0; i < text.length(); i++)
{
char c = text.charAt(i);
if (escaping)
{
current.append(c);
escaping = false;
}
else
{
if (c == '\\')
{
escaping = true;
}
else if (c == ';')
{
ret.add(current.toString());
current = new StringBuilder();
}
else
{
current.append(c);
}
}
}
if (escaping)
{
throw new IllegalArgumentException("Ended in escape sequence");
}
ret.add(current.toString());
return ret;
}
}
(Обратите внимание, что это не позволяет разбивать каждую запись на несколько поля, но вам просто нужно изменить то, что вы делаете с помощью ';', а также реагировать на '-' - принцип тот же.)