Нужен селектор "HAS A" в jQuery - PullRequest
1 голос
/ 16 февраля 2012

Мне нужен селектор, который говорит:

Любая ячейка таблицы, в которой есть флажок

Сейчас я использую:

$('td input').filter(':checkbox').each(function() {
   $(this).closest('td').addClass('CursorPointer');
});
$('td.CursorPointer').on('click',function() {
   $('input:checkbox',this).click();
});

Работает, но может и не быть "лучшим".

Ответы [ 3 ]

7 голосов
/ 16 февраля 2012

Используйте селектор :has() или метод has() :

// select all <td> elements that have a checkbox in them
$('td:has(input:checkbox)');
// same effect
$('td').has('input:checkbox');

Обратите внимание, что input:checkbox эквивалентнона input[type="checkbox"] в Sizzle / jQuery.

Ваш пример кода может быть переписан как:

$('td:has(input:checkbox)').on('click', function() {
  $('input:checkbox', this).click();
});

Или…

$('td').has('input:checkbox').on('click', function() {
  $('input:checkbox', this).click();
});

Обратите внимание, что .has() большеэффективнее, чем :has: http://jsperf.com/jquery-has-vs-has Хотя :has() немного более читабельно ИМХО.

1 голос
/ 16 февраля 2012

Как насчет:

$('td').has('input[type="checkbox"]').addClass('CursorPointer');

Вот пример jsFiddle .

1 голос
/ 16 февраля 2012

Не $("td:has(:checkbox)") делает то, что вы хотите сделать? Вы пробовали это?

...