Selettore jQuery: l'ID termina con?


393

Esiste un oggetto su selectorcui posso richiedere elementi con un ID che termina con una determinata stringa?

Di 'che ho un elemento con un id di ctl00$ContentBody$txtTitle. Come posso ottenere questo passando solo txtTitle?


16
buon vecchio mangling ID pagina master!
Matthew Lock,

1
Imposta ClientIDMode=staticda ASP.Net 4.0 in poi e sbarazzati di questo :)
Murali Murugesan,

1
ClientIDMode = static non funzionerà per coloro che cercano di trovare un elemento in un ripetitore!
Stuart,

Risposte:


629

Se conosci il tipo di elemento, allora: (es: sostituisci "element" con "div")

$("element[id$='txtTitle']")

Se non conosci il tipo di elemento:

$("[id$='txtTitle']")

Ulteriori informazioni disponibili



10
Vorrei cercarlo finendo con '$ txtTitle'. Non è tanto un rischio con il prefisso 'txt', ma se il selettore è 'NameTextBox', corrisponderebbe a 'NameTextBox', 'FirstNameTextBox', LastNameTextBox ', ecc.
Mark

11
Un utente anonimo ha appena provato a modificare quanto segue. Aggiungendolo come commento (come sembra avere senso): Questo non fornisce gli elementi che terminano con id txtTitle. Ecco i documenti: api.jquery.com/element-selector ..element selector è equivalente a getElementsByTagName. Non ha nulla a che fare con l'id dell'elemento. Se si desidera accedere agli elementi che terminano con id, utilizzare questa sintassi $ ("[id $ = 'txtTitle']") o se si conosce il tipo di elemento ..eg div .. quindi utilizzare questa sintassi $ ("div [id $ = 'txtTitle'] ")
Pekka,

1
Link è stato molto utile. Non è la pagina stessa, ma si è trasformata in 2 pagine aggiuntive, di cui avevo bisogno. Ho imparato a catturare segmenti di un titolo, come se l'ID apparisse come "masterPage1_Control0_MyTableName_moreStuff" in Visualizza sorgente, potrei bloccare la mia tabella di <asp: Table ID = "MyTable" ... usando $ ("id * = MyTable] "). Vieni a pensarci bene, mi piace id $ meglio. Hmmm ...
Lukas,

Questo trova l'elemento document.getElementById("f:fTest:j_idt51:0:inpTest"). Questo no $("[id$='inpTest']"). È perché i due punti non sono consentiti in ID (ma JSF lo aggiunge!)?
Panu Haaramo,

Esiste un modo per utilizzare questo selettore con CSS, come pseudo-selettori?
Alejandro Nava,

250

La risposta alla domanda è $("[id$='txtTitle']"), come ha risposto Mark Hurd , ma per coloro che, come me, vogliono trovare tutti gli elementi con un id che inizia con una data stringa (ad esempio txtTitle), prova questo ( doc ):

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

Se vuoi selezionare elementi quale id contiene una determinata stringa ( doc ):

$("[id*='txtTitle']")

Se si desidera selezionare elementi quale ID non è una determinata stringa ( doc ):

$("[id!='myValue']")

(corrisponde anche agli elementi che non hanno l'attributo specificato)

Se vuoi selezionare elementi quale id contiene una determinata parola, delimitata da spazi ( doc ):

$("[id~='myValue']")

Se si desidera selezionare elementi quale id è uguale a una determinata stringa o iniziare con quella stringa seguita da un trattino ( doc ):

$("[id|='myValue']")

Se aggiungi quello che effettivamente risponde alla domanda, ad esempio $ ("[id $ = 'txtTitle']") e lo metti per primo nell'elenco, voterei la tua risposta. Non posso al momento perché non rispondi alla domanda
Alan Macdonald,

2
@AlanMacdonald Non sono sicuro che sia giusto aggiungerlo. Ho risposto alla domanda molto tempo dopo l'accettazione di una risposta, solo per aggiungere ulteriori informazioni ai visitatori. Spero che le persone che hanno votato la mia risposta abbiano anche votato la risposta alla domanda.
Romain Guidoux,

1
@RomainGuidoux è abbastanza giusto che sia la tua chiamata, ma io non rispondo alle risposte che non offrono una soluzione alla domanda posta perché non è ovvio per i neofiti che hanno lo stesso problema dell'OP se arrivano alla pagina e c'è un up risposta votata che non risponde nemmeno alla domanda. Se lo cambiassi per rispondere alla domanda, voterei la tua risposta invece della risposta accettata in quanto è una risposta più completa e più utile. Ether o avrebbe dovuto essere un commento sulla risposta accettata piuttosto che una risposta alla domanda.
Alan Macdonald,

1
@AlanMacdonald Fatto, mi hai convinto.
Romain Guidoux,

33

Provare

$("element[id$='txtTitle']");

modifica: 4 secondi in ritardo: P


32
$('element[id$=txtTitle]')

Non è strettamente necessario citare il frammento di testo a cui stai confrontando


2
Questa dovrebbe essere la risposta giusta! Usare "e" è solo fonte di confusione.
Kees C. Bakker,

13

È più sicuro aggiungere il trattino basso o $ al termine che stai cercando, quindi è meno probabile che corrisponda ad altri elementi che terminano con lo stesso ID:

$("element[id$=_txtTitle]")

(dove elemento è il tipo di elemento che si sta cercando di trovare - ad esempio div, inputetc.

(Nota, stai suggerendo che i tuoi ID tendono ad avere $ segni al loro interno, ma penso che .NET 2 ora tenda invece a usare i trattini bassi nell'ID, quindi il mio esempio usa un trattino basso).


1
Si hai ragione. La proprietà ID utilizza il trattino basso. La proprietà Name utilizza il simbolo del dollaro.
Josh Stodola,

3

Un esempio: per selezionare tutti gli <a>s con ID che termina in _edit:

jQuery("a[id$=_edit]")

o

jQuery("a[id$='_edit']")

3

Poiché si tratta di ASP.NET, è possibile semplicemente utilizzare il tag ASP <% =%> per stampare il ClientID generato di txtTitle:

$('<%= txtTitle.ClientID %>')

Ciò comporterà ...

$('ctl00$ContentBody$txtTitle')

... quando viene visualizzata la pagina.

Nota: In Visual Studio, Intellisense ti urlerà per aver inserito i tag ASP in JavaScript. Puoi ignorarlo poiché il risultato è JavaScript valido.


4
L'OP non ha 'ctl00$ContentBody$txtTitle', ha 'txtTitle', e ti manca il lead #per abbinare un ID. Ma l'OP ha già respinto un suggerimento simile (da quando è stato eliminato): questo non funzionerà se non inserisco il mio Javascript direttamente nel markup, che è un incubo organizzativo. La separazione comportamentale è cruciale per questo progetto.
Martijn Pieters

1

Prova questo:

<asp:HiddenField ID="0858674_h" Value="0" runat="server" />

var test = $(this).find('[id*="_h"').val();

0

Per trovare un id iframe che termina con "iFrame" all'interno di una pagina contenente molti iframe.

jQuery(document).ready(function (){     
                  jQuery("iframe").each(function(){                     
                    if( jQuery(this).attr('id').match(/_iFrame/) ) {
                            alert(jQuery(this).attr('id'));

                     }                   
                  });     
         });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.