Сложный селектор jquery, который ищет токен в string.split - PullRequest
1 голос
/ 02 июня 2011

У меня есть HTML-таблица, в которой один из столбцов содержит <span> с данными, разделенными запятыми.Я хочу придумать селектор jQuery, который возвращает все строки (<tr> s предпочтительнее, но пока что <span> s будет работать), где один из разделенных запятыми токенов <span> в теге span совпадаетпредоставленная строка.

Я начал с чего-то вроде следующего:

$('td.col_8 span:contains("duck")')

, который получит все пролеты в определенном столбце, содержащем слово «утка».Тем не менее, он также может соответствовать <span>fox, mallard-duck</span>.Поскольку «утка» не является уникальным токеном в этом промежутке, я бы не хотел, чтобы он был включен в матч.

Есть ли способ сузить набор результатов, поэтому я включаю результаты только там, где есть точныйсоответствует определенному токену в списке, разделенном столбцами?

(я использую jQuery 1.2.3)

Ответы [ 3 ]

3 голосов
/ 02 июня 2011

В этом и заключается красота выражений jQuery.

Вы можете добавить свой собственный выборщик. Я собираюсь назвать это тегом в этом случае

jQuery.expr[":"].tag = function(elem, index, match, nodeList) {
    var tags = $(elem).text().replace(/(?:\ +)?,(?:\ +)?/g, ",").split(",");
    return tags.indexOf(match[3]) > -1;
}

Это будет проверять каждый ранее сопоставленный элемент с этим селектором. Во-первых, это сглаживает разделение (так будет работать что-то вроде «firstTag, onotherer, badly, spaced, tag»). jQuery уже заботится о синтаксическом анализе селектора и передает его как совпадающий. матч [3] - это то, что вас интересует. При следующем использовании match [3] будет «утка»

$('td.col_8 span:tag("duck")')

возвращаемая строка будет возвращать true или false в зависимости от наличия тега в списке.

2 голосов
/ 02 июня 2011

Я думаю, что это должно сделать

$('td.col_8 span').filter(function() { 
    return $(this).text().match(/^duck$/); 
});

Теперь вам просто нужно определить необходимое регулярное выражение или реализовать разделение строк и поиск по массиву, чтобы получить логическое значение, указывающее, следует ли включать <span>.

0 голосов
/ 02 июня 2011

Исходя из ответа Расс Кэма , вот что я придумал:

$('td.col_8 span').filter(function() { 
  return $.inArray('quiet',$(this).html().split(', ')) !== -1;
});

Конечно, это предполагает, что список всегда будет ограничен ,[space], ноэто должно работать для моего непосредственного использования.

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