2009-11-06 159 views
1

我正在嘗試使用jQuery來檢查是否存在包含特定字符串文本的<option>。到目前爲止,我的嘗試沒有按照我的預期工作。這裏的HTML:檢查某個文本的選項是否存在

<select> 
    <option value="13">General</option> 
    <option value="3">Innovation</option> 
    <option value="8">Marketing</option> 
    <option value="9">Operations</option> 
    <option value="11">Research</option> 
</select> 

這裏的腳本:

var topicSelect = $("select"); 
var haveTopic = topicSelect.val("Not Here"); 
alert(haveTopic); 

我期待的警報,以示「不確定」,然而這似乎是回報社會的select對象。有沒有一種方法可以檢查選項是否存在,而不是循環遍歷每一個選項?

澄清:

  • 的文本需要字符串匹配,不珍惜
  • 尋找一個確切的,區分大小寫匹配
  • 可以返回真/假或未定義
+0

你想要''option'的實際'value'或者它的文本內容嗎? – 2009-11-06 15:18:49

+0

我不清楚你想匹配什麼 - 它必須完全匹配嗎?這是一個大小寫敏感的比賽嗎?如果代碼需要進行部分匹配,那麼如何處理返回兩個不同選項的匹配?如果沒有找到匹配項,你希望它返回'undefined',是true? – artlung 2009-11-06 15:49:20

回答

1

我相信這應該會發現你在找什麼:

if ($("option:contains('not here')").length > 1) { } 

的原因,您原來的代碼沒有工作是因爲你設置選擇的價值屬性,它是返回select,因爲jQuery方法將(幾乎)總是返回節點集(在您的情況下由「$('select')」生成),以便可以將該方法集成到鏈中。

1

要測試某個值:

var haveTopic = $("select option[value='not here']").length != 0 

編輯

爲了測試文本:

var haveTopic = $.inArray('Not Here',$("select").text().replace(/ /g,'').split("\n")) != -1 
+2

這會找到「not here」的值--OP正在尋找「not here」的文本內容。 – 2009-11-06 15:33:48

+0

@Mark:是@Frank DeRosa是對的。我現在糾正了這個問題,對此感到遺憾。 – 2009-11-06 15:40:04

+0

@Alex:我重新編寫它來測試文本,參見上文。 – Mark 2009-11-07 16:05:49

0

我沒有看過.filter(FN)是如何實現的,但是你可以使用它作爲一個解決方案。

$.fn.hasOptionWithText = function(text) { 

    var options = $("option", $(this)).filter(function(){ 
     return $(this).text() === text; 
    }); 

    return options.length > 0; 
}; 


$(document).ready(function() { 
    var hasNotHere = $("select").hasOptionWithText('Not Here'); 
    var hasGeneral = $("select").hasOptionWithText('General'); 

    alert(hasNotHere + ' ' + hasGeneral); 
}); 
相關問題