Как выделить некоторые параметры в HTML-выделении с помощью jQuery - PullRequest
1 голос
/ 22 июля 2009

У меня есть ссылка jQuery на список выбора HTML. Мне нужно перебрать опции и проверить, соответствует ли текст опции регулярному выражению, если я хочу добавить 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>

Я хочу добавить класс CSS к элементам 1, 2, 5 в этом примере. В c # мое регулярное выражение было Regex expression = new Regex(@"\*\*\*");, но сейчас я хочу сделать это через javascript, так что, скорее всего, регулярное выражение будет выглядеть немного иначе.

Любые идеи, что я могу сделать здесь, чтобы выполнить требование?

Спасибо, ~ Ск

Ответы [ 6 ]

1 голос
/ 22 июля 2009

Как я уже писал в своем ответе на вопрос C #, вам не нужно регулярное выражение, если вы хотите сопоставить 3 звездочки. Попробуйте следующее:

$(document).ready(
function()
{
    $('#someddl option:contains("***")').addClass('selected');
}
);
1 голос
/ 22 июля 2009

Ну, конечно, вы можете воспользоваться $ .each (), вот так:

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

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

Вы должны будете сами сделать регулярное выражение, так как это в значительной степени причиняет боль в заднице: P

0 голосов
/ 22 июля 2009

Если у вас есть регулярное выражение, есть пост, объясняющий, как расширить jquery для использования регулярного выражения.

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());
        }
    }
);

Это позволит вам использовать регулярное выражение прямо в селекторе вместо циклического перебора выбранных результатов и сопоставления с регулярным выражением.

0 голосов
/ 22 июля 2009

Вы ищете:

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

/[\*]{3}/ // match 3 *
/[^\*]{1,}/ // match atleast 1 non *
0 голосов
/ 22 июля 2009

Я бы сделал это так

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

Просто знайте, что существует очень ограниченное подмножество CSS, которое вы можете применить к <option> элементам

0 голосов
/ 22 июля 2009

Примерно так должно работать:

$('select[id=whatever] option').each(function() { 
  if (... your condition ...) {
    $(this).addclass('cssClass');
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...