jquery каждое совпадение не работает

#jquery #regex #match #each

#jquery ( jquery ) #регулярное выражение #совпадение #каждый

Вопрос:

В любом случае, я хочу сделать вывод, что если идентификатор div соответствует чему-то, то добавьте к нему класс. Мой код здесь, но каждое совпадение не работает. пожалуйста, помогите, спасибо.

 <script>
$(document).ready(function(){
    var num = '3';
    $('.ddd').each(function(){
        if($(this).attr('id').match(/^'id' num$/)){
            $(this).addClass('eee');
        }
    });
});
</script>
<style>
.ddd{float:left;display:block;background:#9FF;width:50px;height:50px;margin:10px;}
.eee{background:#F36!important;}
</style>
<div class="ddd" id="id1"></div>
<div class="ddd" id="id2"></div>
<div class="ddd" id="id3"></div>
<div class="ddd" id="id4"></div>
<div class="ddd" id="id5"></div>
<div class="ddd" id="id6"></div>
<div class="ddd" id="id7"></div>
 

Ответ №1:

Обновить:

 var num = '3';
$('#id'   num).addClass('eee');
 

Вы можете просто использовать starts с selector ^= и применить класс следующим образом:

 $('div.ddd[id^="id"]').addClass('eee');
 

Это применит eee класс ко всем элементам, которые имеют id атрибут, начинающийся с текста id 🙂

Комментарии:

1. но разве он просто не хочет, чтобы у третьего был класс?

2. @Sarfraz, @Royi Namir, извините за мою ошибку, я хочу только сопоставить совпадение с div id num (число может быть 1, 2 или 3 … как я и сделал, поэтому только один div добавит класс) спасибо.

3. @Manuel: Не так, как я это вижу. OP может рассказать дальше 🙂

4. $(‘div.ddd[id^=»id’ num ‘»]’).addClass(‘eee’);

Ответ №2:

Вероятно, вам следует послушать всех этих парней, говорящих, что вы должны использовать фактический селектор id ( #id ) или селектор attribute ( [attribute=value] ), но, чтобы ответить на ваш вопрос, я собираюсь указать, что вы сделали неправильно.
При создании «динамических» регулярных выражений, которые должны инкапсулировать в них переменные, вы должны использовать new RegExp конструктор вместо встроенного синтаксиса /rule/ . Более того, если вы просто хотите проверить, соответствует ли что-то регулярному выражению, вам, вероятно, следует использовать метод регулярного test выражения. :

 var num = '3';
var regex = new RegExp('^id'   num   '


Комментарии:

1. Извините всех. Но я должен исправить отмеченный правильный ответ для справедливости, потому id^="id' num '" что также будет соответствовать идентификатору id30,id31... , поэтому мне все еще нравится регулярное выражение.

Ответ №3:

 $(document).ready(function(){
    var num = '3';
    $('.ddd').each(function(){
        if($(this).attr('id').match(/^id[0-9] $/)){
            $(this).addClass('eee');
        }
    });
});
 

Ответ №4:

 <script>
$(document).ready(function(){
    var num = '3';
    $(".ddd[id='id'" num "']").addClass('eee');
    });
 

Ответ №5:

 $(document).ready(function(){
    var num = '3';
    $('.ddd[id^="id' num '"]').addClass('eee');
});
 

Ответ №6:

пусть все будет просто 🙂

 $(document).ready(function(){
    var num = '3';
    $('.ddd#id'   num).addClass('eee');
});
 

);
$('.ddd').each(function(){
if(regex.test($(this).attr('id'))){
$(this).addClass('eee');
}
});

Комментарии:

1. Извините всех. Но я должен исправить отмеченный правильный ответ для справедливости, потому id^="id' num '" что также будет соответствовать идентификатору id30,id31... , поэтому мне все еще нравится регулярное выражение.

Ответ №3:


Ответ №4:


Ответ №5:


Ответ №6:

пусть все будет просто 🙂