如何使用jQuery突出显示HTML选择中的某些选项

时间:2009-07-21 21:09:05

标签: javascript jquery html css

我有一个HTML选择列表的jQuery引用。我需要迭代选项并检查选项的文本是否与正则表达式匹配,如果是,我想在该选项中添加cssclass。我该怎么做?

var ddl = $($get('<%= someddl.ClientID %>'));

我可以以某种方式利用.each()函数吗?

实施例

<select id="someddl">
<option value="21">[21] SomeData ***DATA***</option>
<option value="22">[22] SomeData ***DATA***</option>
<option value="23">[23] SomeData </option>
<option value="24">[24] SomeData </option>
<option value="25">[25] SomeData ***DATA***</option>
 </select>

我想在此示例中为项目1,2,5添加一个CSS类。 在c#中,我的正则表达式是Regex expression = new Regex(@"\*\*\*");,但我现在想通过javascript执行此操作,因此正则表达式可能看起来有点不同。

我能在这里做些什么来完成这项要求?

谢谢, 〜CK

6 个答案:

答案 0 :(得分:1)

嗯,当然你可以利用$ .each(),就像那样:

$("#someddl option").each(function(i){
    var val = $(this).html();

    if(// regex)
    {
        $(this).addClass("myclass");
    }
});

你必须自己做正则表达式,因为它在屁股上非常痛苦:P

答案 1 :(得分:1)

正如我在回答您的C#问题时写的那样,如果您想要匹配3个星号,则不需要正则表达式。请尝试以下方法:

$(document).ready(
function()
{
    $('#someddl option:contains("***")').addClass('selected');
}
);

答案 2 :(得分:0)

这样的事情应该有效:

$('select[id=whatever] option').each(function() { 
  if (... your condition ...) {
    $(this).addclass('cssClass');
  }
});

答案 3 :(得分:0)

我会这样做

$(function()
{
  $("#someddl option").each(function(i,elem)
  {
    if( /\*{3}/.test( elem.text) )
    {
        $(elem).addClass("myclass");
    }
  });
} );

只知道有一个非常有限的CSS子集,您可以实际应用于<option>元素

答案 4 :(得分:0)

您正在寻找的是:

re = /[\*]{3}[^\*]{1,}[\*]{3}/

/[\*]{3}/ // match 3 *
/[^\*]{1,}/ // match atleast 1 non *

答案 5 :(得分:0)

如果你有正则表达式,有一篇文章解释如何扩展jquery以使用regexp。

http://blog.mastykarz.nl/jquery-regex-filter/

jQuery.extend(
    jQuery.expr[':'], {
        regex: function(a, i, m, r) {
            var r = new RegExp(m[3], 'i');
            return r.test(jQuery(a).text());
        }
    }
);

这将允许您在选择器中使用正则表达式,而不是循环选定的结果并匹配正则表达式。