2012-02-15 40 views
1
選擇

我需要一個選擇,說:需要一個「有」 jQuery中

,有一個複選框,在它

現在任何表格單元格中,我使用的是:

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

它可以工作,但它可能不是「最好的」。

回答

7

使用the :has() selectorthe has() method

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

注意input:checkbox相當於灒/ jQuery的input[type="checkbox"]

您的代碼示例可以寫成:

$('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()稍微更具可讀性恕我直言。

+0

儘管語法上更好,但不會更快地調用'.has()'? – Nic 2012-02-15 21:16:42

+0

@melee'.has()'可能會更快,因爲它避免了Sizzle的自定義僞類(這意味着'qSA'可以使用時)。 OTOH,'.has()'確實引入了一個額外的函數調用。爲什麼不[jsPerf](http://jsperf.com/)呢? ;) – 2012-02-15 21:22:33

+0

@MathiasBynens我在編寫性能測試中很糟糕,哈哈 – Nic 2012-02-15 21:23:04

1

是不是$("td:has(:checkbox)")做你想做的事情?你試過了嗎?

+0

使用JavaScript,我總是詢問StackOverflow,因爲解決方案從來不是我想到的我自己的。 – 2012-02-15 21:19:38

1

如何:

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

下面是一個例子jsFiddle