Как я могу выбрать элемент по ID с помощью jQuery с помощью regex?


у меня есть следующие элементы:

<input id="AAA_RandomString_BBB" type="text" />
<input id="AAA_RandomString_BBB_Start" type="text" />
<input id="AAA_RandomString_BBB_End" type="text" />

AAA & BBB являются константами, и я всегда буду знать, что они есть. Однако RandomString всегда будет случайным.

Я хочу получить значение AAA_RandomString_BBB. Я не хочу, чтобы значения из входных элементов с ID, заканчивающиеся на _Start и _End.

я попробовал следующее:

$('[id^="AAA_"]')

но выше выбираются все входные элементы, которые имеют идентификатор, начиная с "AAA_"

мне нужно каким-то образом выбрать с помощью синтаксиса типа regex, например:

$('[id^="AAA_(.+?)_BBB"]')

это возможно? Если нет, Может ли кто-нибудь предложить способ выбора

7 53

7 ответов:

вы можете объединить оба селектора в множественный селектор атрибутов.

​$("[id^=AAA_][id$=_BBB]")

он вернет все элементы, соответствующие всем указанным атрибутивным фильтрам:

  • [id^=AAA_] играм с элементами начиная с AAA_ и
  • [id$=_BBB] играм с элементами заканчивая _BBB.

еще один общий альтернативы:

используйте этот:

$('[id^="AAA_"][id$="_BBB"]')

Скрипка:http://jsfiddle.net/J6hGx/

Это можно сделать так:

$('input').filter(function(){ return this.id.match(/^AAA_.+_BBB$/) })

Вы можете дать использовать $('input', <context>) чтобы сделать поиск более точным. Смотрите также здесь

вы можете искать id, начиная с AAA и заканчивая BBB такой:

​$("[id^=AAA_][id$=_BBB]")

рабочая скрипка:http://jsfiddle.net/DN9uV/

Я использую, чтобы решить эту проблему с селекторами классов, которые не должны быть уникальными.

Это также положительно влияет на скорость, потому что не требуется сложный поиск Кроме того, вы можете использовать это для различных стилей различных элементов

например

<elem id="1" class="aa">element type aa</elem>
<elem id="2" class="aa">element type aa</elem>
<elem id="3" class="aa bb">element type aa and bb</elem>
<elem id="4" class="bb">element type bb</elem>

теперь вы можете просто использовать селектор класса

$('.aa').click(function(){
     console.log( 'clicked type aa #' + $(this).attr('id') );
});

$('.bb').click(function(){
     console.log( 'clicked type bb #' + $(this).attr('id') );
});

было бы лучше просто проверить идентификатор, заканчивающийся на _BBB by

 $("[id$=_BBB]")

Как насчет этого :

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
    </head>
    <body>
        <input id="AAA_RandomString_BBB" type="text" />
        <input id="AAA_RandomString_BBB_Start" type="text" />
        <input id="AAA_RandomString_BBB_End" type="text" />

        <script>
            $(document).ready(function () {
                debugger
                var targetElement = $('input')
                .filter(function () {
                    var el = this.id.match(/^AAA.*BBB$/g);
                    return el;
                });
                console.log(targetElement.val());
            })
        </script>
    </body>
</html>