2010-05-12 59 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

相关问题