如何使用正则表达式使用jQuery通过ID选择元素?

时间:2012-11-24 13:57:08

标签: javascript 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&amp; BBB是常数,我将永远知道它们是什么。但是RandomString总是随机的。

我想获得AAA_RandomString_BBB的值。我不希望输入元素的值以_Start或_End。

结尾

我尝试了下面的内容:

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

但是上面选择了所有ID为“AAA _”

的输入元素

我需要一些方法来选择使用正则表达式类型语法,如:

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

这可能吗?如果没有,任何人都可以提出一种选择方法

7 个答案:

答案 0 :(得分:121)

您可以在multiple attribute selector中合并两个选择器。

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

它将返回与所有指定属性过滤器匹配的所有元素:

  • [id^=AAA_]匹配以id开头的AAA_属性的元素,
  • [id$=_BBB]匹配id属性以_BBB结尾的元素。

另一种通用替代方案:

答案 1 :(得分:14)

使用此:

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

小提琴:http://jsfiddle.net/J6hGx/

答案 2 :(得分:7)

您可以查找以AAA开头并以BBB结尾的ID:

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

工作小提琴:http://jsfiddle.net/DN9uV/

答案 3 :(得分:7)

这可以这样做:

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

您可以使用$('input', <context>)来使搜索更精确。 另请参阅here

答案 4 :(得分:1)

我用类别选择器来解决这个问题,这些选择器不需要是唯一的。

这对速度也有积极影响,因为不需要复杂的搜索 此外,您可以将其用于不同元素的不同样式

e.g。

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

答案 5 :(得分:0)

最好只检查_BBB上以

结尾的id
 $("[id$=_BBB]")

答案 6 :(得分:0)

这个怎么样:

<!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>