2017-12-27 221 views
1

什麼是最短的方式獲得所有selects正好4 options查找所有可見的選項與4個選項

否則我將不得不每次循環select並獲得$find('option').length == 4

這似乎並不奏效:

$.grep($("select:visible"), function() { 
    return $(this).find('option').length == 4; 
}); 
+0

如何添加一個類(即OPT4)當您創建/填充它們?那麼你可以只使用一個類選擇器 –

+0

@mike_t對不起,它是在擴展 – user5858

+0

你試過['.has()'](http://api.jquery.com/has/)方法嗎? – agrm

回答

3

您可以使用:has():eq():not()選擇組合。

表達:has(option:eq(3))將針對其具有交替 - 以免4 option子元件和表達:not(:has(option:eq(4)))將排除具有5 option子元素的元素。

$("select:visible:has(option:eq(3)):not(:has(option:eq(4)))").css('color', 'red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select> 
 
    <option>1</option> 
 
    <option>2</option> 
 
    <option>3</option> 
 
</select> 
 
<select> 
 
    <option>1</option> 
 
    <option>2</option> 
 
    <option>3</option> 
 
    <option>4</option> 
 
</select> 
 
<select> 
 
    <option>1</option> 
 
    <option>2</option> 
 
    <option>3</option> 
 
    <option>4</option> 
 
    <option>5</option> 
 
</select>


您還可以使用.filter()

$("select:visible").filter(function() { 
 
    return $(this).find('option').length == 4; 
 
}).css('color', 'red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select> 
 
    <option>1</option> 
 
    <option>2</option> 
 
    <option>3</option> 
 
</select> 
 
<select> 
 
    <option>1</option> 
 
    <option>2</option> 
 
    <option>3</option> 
 
    <option>4</option> 
 
</select> 
 
<select> 
 
    <option>1</option> 
 
    <option>2</option> 
 
    <option>3</option> 
 
    <option>4</option> 
 
    <option>5</option> 
 
</select>

0

您的代碼也是正確的唯一的問題是你需要用你的S使用某些元素選擇元素可以使$ .find函數起作用。 例如

//Going to add a div to wrap all elememts  
var myDiv = $("<div><select><option>1</option><option>2</option><option>3</option></select><select><option>1</option><option>2</option><option>3</option><option>4</option></select><select><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option></select><div>"); 
$.grep(myDiv.find("select"),(el)=>$(el).find("option").length===4);