it-swarm.com.de

Wie kann ich ein Element anhand der ID mit jQuery unter Verwendung von Regex auswählen?

Ich habe folgende Eingabeelemente:

<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 sind Konstanten und ich werde immer wissen, was sie sind. RandomString ist jedoch immer zufällig.

Ich möchte den Wert von AAA_RandomString_BBB erhalten. Ich möchte nicht, dass die Werte der Eingabeelemente mit der ID auf _Start oder _End enden.

Ich habe folgendes versucht:

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

Das obige wählt jedoch alle Eingabeelemente aus, deren ID mit "AAA_" beginnt.

Ich brauche einen Weg, um mit einer Regex-Syntax auszuwählen:

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

Ist das möglich? Wenn nicht, kann jemand eine Auswahlmethode vorschlagen 

55
user1762489

Sie können beide Selektoren in einem Multiple-Attribut-Selector kombinieren.

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

Es werden alle Elemente zurückgegeben, die mit den angegebenen Attributfiltern übereinstimmen:

  • [id^=AAA_] vergleicht Elemente mit id-Attribut, die mit AAA_ beginnen, und
  • [id$=_BBB] ordnet Elementen zu, deren id-Attribut mit _BBB endet.

Weitere generische Alternativen:

118
Alexander

Benutze das:

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

Geige: http://jsfiddle.net/J6hGx/

Dies kann wie folgt gemacht werden:

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

Sie können $('input', <context>) verwenden, um die Suche präziser zu gestalten . Siehe auch hier

7
beipawel

Sie können nach IDs suchen, die mit AAA beginnen und mit BBB wie folgt enden:

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

Die Arbeitsgeige: http://jsfiddle.net/DN9uV/

6
Varun Vohra

Ich löse dies mit den Klassenselektoren, die nicht eindeutig sein müssen.

Dies wirkt sich auch positiv auf die Geschwindigkeit aus, da keine komplexe Suche erforderlich ist

z.B.

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

Jetzt können Sie einfach den Klassenselektor verwenden

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

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

Es wäre besser, einfach nach der ID zu suchen, die auf _BBB endet

 $("[id$=_BBB]")
0
Huzaifa Qamer

Wie wäre es damit :

<!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>
0
Bimal Das