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
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:
:regex()
-Selektors ,.filter()
- basierten Ansatzes .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
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/
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') );
});
Es wäre besser, einfach nach der ID zu suchen, die auf _BBB endet
$("[id$=_BBB]")
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>