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();
, но я хотел бы узнать и понять, как использовать противоположный (не-селектор).
Ответы
Ответ 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')