условный селектор jQuery для строк таблицы

У меня есть таблица с данными в:

<td> item </td><td> order code </td><td> price </td>

Я обрабатываю таблицу с jQuery, который должен найти код заказа:

$.each($('.productList tbody tr'), function() {
    var orderCode = $(this).find('td:eq(1)').html().trim();
    // do stuff
});

Если нет никаких продуктов, таблица показывает сообщение:

<td colspan="3"> There are no products to display </td>

Вышеупомянутая строка заставляет функцию jQuery разбомбить. Что самый устойчивый путь состоит в том, чтобы использовать условный селектор для игнорирования "продуктов" строка? Есть ли селектор для colspan="1" или colspan is not set или независимо от того, что это должно было бы быть?

10
задан Brian Tompsett - 汤莱恩 5 June 2017 в 21:51
поделиться

6 ответов

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

$('.productList tbody tr').each(function() { 
   var orderCode = $(this).find('td:eq(1)');

   if(orderCode.length > 0) { // Make sure it exists
     orderCode = orderCode.html().trim(); 
     // do stuff 
   }
}); 
8
ответ дан 3 December 2019 в 16:08
поделиться

Если вы можете изменить способ создания таблицы, использование классов будет более чистым решением:

<td class="item-name"> item </td>
<td class="order-code"> order code </td>
<td class="item-price"> price </td>

Затем выберите только желаемый класс:

var orderCode = $(this).find('td.order-code').html().trim();
if(orderCode)
{
  //do stuff
}

Это также даст вам большую гибкость в стилизации таблицы с помощью CSS и вашего кода. не сломается, если вы добавите или измените порядок столбцов.

3
ответ дан 3 December 2019 в 16:08
поделиться

Вы можете проверить, сколько существует td s:

$.each($('.productList tbody tr'), function() {
    var tds = $(this).find('td');
    if(tds.length >= 2) {
        var orderCode = tds.eq(1).html().trim();
        // do stuff
    }
});
2
ответ дан 3 December 2019 в 16:08
поделиться

Дополнительная фильтрация того, что написано SLaks

$ ("table tbody tr td: nth-child (2): contains ('code')")

0
ответ дан 3 December 2019 в 16:08
поделиться

Используйте метод .attr(). Посмотрите api.jquery.com и это должно помочь вам разобраться, как получить атрибут colspan из ваших ячеек.

0
ответ дан 3 December 2019 в 16:08
поделиться

Примерно так:

$('.productList tbody tr:has(td:nth-child(2))').each(function() {
    ...
});

Будет выбрано только элементы, у которых есть , который является вторым дочерним элементом своего родителя. (селектор nth-child основан на единице)

13
ответ дан 3 December 2019 в 16:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: