2010-05-12 63 views
0

我知道這應該是更容易,如果我只能使用optgroups。但我試圖避免黑客攻擊我的CMS的核心,所以jQuery應該再次來拯救,希望。設置屬性禁用選項不包含某個字符串

我有一個選擇層次結構有時候,我想把屬性禁用任何包含文本不以短劃線開頭的選項。 我想這樣的代碼:

將禁用的屬性設置爲選項文本不以短劃線(「 - 」)開頭的選擇器。

<select id="options"> 
<option value="" selected="selected">- Please choose -</option> 
<option value="1">Parent1</option> 
<option value="2">-child1</option> 
<option value="3">-child2</option> 
<option value="4">-child3</option> 
<option value="5">-child4</option> 
<option value="6">Parent2</option> 
<option value="7">-child5</option> 
<option value="8">-child6</option> 
<option value="9">-child7</option> 
<option value="10">-child8</option> 
</select> 

最接近的解決方案是在這裏:contain/start by

$.extend($.expr[':'], { 
    startsWith: function(elem,match) { 
     return (elem.textContent || elem.innerText || "").indexOf(match[3]) == 0; 
    } 
}); 

但我似乎無法做是正確的這麼遠。

任何幫助將非常感激。非常感謝你。

回答

1

您可以使用.filter(),像這樣:

​$("#options option").filter(function() { 
    return $(this).text().indexOf("-") !== 0; 
}​).attr('disabled', true);​​ 

這過濾掉那些沒有文字開始"-"you can see a demo here任何元素。

自定義選擇的辦法,像你的問題,會是這樣:

$.extend($.expr[':'], { 
    startsWith: function(a, b, match) { 
     return $(a).text().indexOf(match[3]) === 0; 
    } 
}); 

$("#options option:not(:startsWith(-))").attr('disabled', true);​ 

You can see a demo of that method here

+0

你是我的英雄尼克。奇蹟般有效。這也應該可以幫助許多具有這種限制的CMS用戶,他們可能很幸運地發現這一點。真的非常感謝你。 – swan 2010-05-12 20:04:40

+0

順便說一句,爲了學習的目的,我可以把.attr('disabled','disabled');那裏呢?謝謝 – swan 2010-05-12 20:06:17

+0

第二個選項,我幾乎在那裏除了「:not(:」關於哪一個我感到困惑「.not」的部分除外。謝謝 – swan 2010-05-12 20:09:43

相關問題