Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 将属性禁用设置为不包含特定字符串的选项_Jquery_Attributes - Fatal编程技术网

Jquery 将属性禁用设置为不包含特定字符串的选项

Jquery 将属性禁用设置为不包含特定字符串的选项,jquery,attributes,Jquery,Attributes,我知道如果我只能使用optgroup,这应该会更容易。但我正在努力避免黑客攻击我的CMS核心,所以jQuery应该再次出手相救,希望如此 我有时会在层次结构中选择带有选项的选项,我想将属性禁用到任何包含不以破折号开头的文本的选项。 我想编写如下代码: 为选项文本不以破折号(“-”)开头的选择器设置禁用属性。 <select id="options"> <option value="" selected="selected">- Please choose -</op

我知道如果我只能使用optgroup,这应该会更容易。但我正在努力避免黑客攻击我的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>
但到目前为止我似乎做不好

任何帮助都将不胜感激。非常感谢。

您可以这样使用:

​$("#options option").filter(function() {
    return $(this).text().indexOf("-") !== 0;
}​).attr('disabled', true);​​
这将过滤掉所有没有以
“-”开头的文本的元素

与您的问题一样,自定义选择器方法是:

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

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

.

尼克,你是我的英雄。工作起来很有魅力。这也应该有助于许多CMS用户与这一限制谁可能幸运地发现这一点。非常感谢。顺便说一句,为了学习的目的,我可以把.attr('disabled','disabled');​​ 还有吗?感谢第二个选项,除了“:not”(:“我被“.not”弄糊涂了)这一部分,我几乎就到了。Thanks@kuswantin-在这种情况下,最好使用
.attr('disabled',bool)
.attr('readonly',bool)
,因为jQuery实际上是在DOM上运行的。
disabled=“disabled”
只是设置为真,因为
“disabled”!==false
,它将弱类型转换为真。是的,谢谢。希望我从头到脚都清楚地了解这个伟大的软件:)但我很高兴我总是幸运地找到像你这样的帮助。谢谢
$.extend($.expr[':'], {
    startsWith: function(a, b, match) {
        return $(a).text().indexOf(match[3]) === 0;
    }  
});

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