Подтвердить что ты не робот

JQuery "выберите все, кроме"

Я пытаюсь выбрать первую строку таблицы. Примечание: первая строка обернута тегом thead, поэтому:

<table>
  <thead>
    <tr>  <!-- first row --> </tr>
  </thead>
  <tbody>
    <tr>  <!-- body --> </tr>
  </tbody>
  <tfoot>
    <tr>  <!-- body --> </tr>
  </tfoot>
</table> 

Совет select first row ' может работать, если это не касается тегов-оберток. Это то, что я пробовал, но не работает:

 $("*:not(thead)", tableSelector).remove();

I.e., я хотел бы избавиться от селекторов tbody и tfoot, используя селектор "not tfoot". Потому что я хочу удалить все остальное из таблицы, кроме <thead> и all-inside-thead. Поэтому в основном я пытаюсь выбрать все, кроме ада и что внутри него; интуитивно, что-то вроде :not(thead *) может работать, но не делает.

Мое обходное решение $("tbody, tfoot", tableSelector).remove();, но я хотел бы узнать и понять, как использовать противоположный (не-селектор).

4b9b3361

Ответ 1

Ваш вопрос не совсем ясен. Чтобы выбрать первую строку в одной таблице:

$("table tr:first")...

или наоборот:

$("table tr:not(:first)")...

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

$("table").each(function() {
  $(this).find("tr:first")...
});

Вы можете получить все строки не в THEAD с помощью

$("table > :not(thead) > tr")...

Изменить: Я думаю, вы слишком усложняете это. Если вы хотите удалить все, кроме THEAD и его содержимого, это относительно просто:

$("table > :not(thead)").remove();

Если вы хотите оставить элементы TBODY и TFOOT на месте, измените его на:

$("table > :not(thead) > tr").remove();

Ответ 2

Используя children() в селекторе таблицы выберет только прямых детей. Вы можете отфильтровать это, используя неселектор.

$(tableSelector).children(':not(thead)').remove();

Ответ 3

Я пытаюсь выбрать первую строку таблицы.

Почему бы не использовать старый добрый DOM?

mytable.rows[0]

Ответ 4

Если вы хотите удалить любой child из a table кроме thead, попробуйте этот селектор:

table > *:not(thead)

Изменить. Поскольку вы указали, что у вас уже есть таблица в переменной:

$("> *:not(thead)", context)

Ответ 5

Псевдо-селектор ": not" получает в качестве параметра другой селектор, поэтому вы можете удалить все, кроме этого и следующего:

$(':not(thead, thead *)', 'table').remove();

Вы можете посмотреть здесь в действии.

Это очень похоже на то, что вы написали в свой комментарий, за исключением того, что вы не использовали контекст (который удалил таблицу node), и вы использовали детский операнд, который не включал "все" в аду, а вместо этого включал только его прямых детей. Удаление дочернего операнда " > " исключает всех потомков node, а не только прямых детей.

Ответ 6

Я буду выглядеть следующим образом:

$('table thead  tr:first-child')