JQuery Удаление всех, кроме совпавших строк - PullRequest
2 голосов
/ 28 октября 2009

Я пытаюсь удалить все строки из таблицы, ЗА ИСКЛЮЧЕНИЕМ соответствующих строк:

Этот код удаляет строки, которые я на самом деле хочу сохранить -

$("table#traffic").each(function() {
    $("td:contains('" + selected_text + "')").parent().remove();
}); 

Я в основном хочу сделать противоположное выше.

Ответы [ 6 ]

1 голос
/ 28 октября 2009

Функция удаления также может принимать выражение в качестве опции.

$("table#traffic tr").remove(":not(:contains('" + selected_text + "')"));

Интересно, что следующие профили немного быстрее с несколькими строками. Я полагал, что вызов parent () увеличил бы время.

$("table#traffic td:not(:contains('" + selected_text + "'))").parent().remove();

Итак, я полагаю, вы можете использовать то, что вы лучше читаете.

1 голос
/ 28 октября 2009

На первый взгляд, я запутался - вы выполняете функцию .each () для каждого совпадения («таблица # трафик»), но затем вы не интегрируете $ (this) в любом месте вашего .each () функция, которая сообщает мне, что вы можете полностью исключить цикл .each ().

Что касается вашего вопроса, работает ли: not selector с: contains?

$("td:not(:contains('" + selected_text + "'))").parent().remove();
1 голос
/ 28 октября 2009

Попробуйте $("td:not(contains('" + selected_text + "'))").parent().remove();

0 голосов
/ 28 октября 2009

Я удивлен, что никто не упомянул метод filter ... Из документов:

фильтр (expr)
Удаляет все элементы из набора совпадающие элементы, которые не соответствуют указанное выражение (я). Этот метод используется для сужения результатов поиск ...

Так, может быть, что-то вроде этого?

$("table#traffic tr")
    .filter(':has(td:contains('" + selected_text + "'))')
    .remove();

Конечно, вы все равно можете использовать комбинацию not для достижения того же выбора (есть много других способов снять шкуру с этой кошки). Я просто подумал, что упомяну функцию filter, потому что для этого она есть.

Наконец, я также хочу отметить, что ни один из подходов, на которые дан ответ, пока не решает очень вероятную ситуацию, когда вы в конечном итоге удалите строки, которые вам не нужны! Например, если строка имеет несколько ячеек, вы не хотите, чтобы только одна из тех ячеек в строке, не содержащих ваш текст, вызывала удаление всей строки! Обратите внимание, что в моем решении выше фильтрация выполняется на уровне строк, а не на уровне ячеек. (Я не проверял это, поэтому, пожалуйста, не прыгайте на меня, если это не работает точно как есть!)

Удачи!
-Mike

0 голосов
/ 28 октября 2009

Я разочарован, что приведенные выше решения не относятся к его конкретной таблице и фактически проверяют все строки таблицы. Это может быть нежелательным эффектом.

$("table#traffic td:not(:contains('" + selected_text + "'))").parent().remove();
0 голосов
/ 28 октября 2009

есть функция .not, с которой вы могли бы работать. http://docs.jquery.com/Traversing/not#expr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...