Trouvez l'élément html dont l'ID commence par

89

ma question est la suivante:

J'ai du code HTML dans plusieurs pages, sur chacune d'elles j'ai utilisé un JQgrid (grille jquery) pour afficher certaines données. Je savais que sur chacune de ces pages, l'élément qui contient le JQgrid est nommé "LIST_xxx". Maintenant, j'ai besoin de faire un javascript qui prend cet élément "LIST_XXXX" sur chaque page et fait des choses. Comment pourrais-je rechercher un élément par ID mais ne connaissant que sa partie initiale (de l'ID, comme je l'ai mentionné précédemment):

$('#list_[XXXX]')... --> The part surrounded by [] is variable on each page, i want to discriminate that.

J'espère que je me suis fait clairement comprendre. Merci.

lidermin
la source

Réponses:

171

Essayer

$('div[id^="list_"]')

Ça devrait marcher

Glen Little
la source
Bien meilleure mise en page sur cette référence que la documentation jquery.
Yuriy Faktorovich
Cela fonctionne très bien grâce ... Je l'ai utilisé pour trouver un identifiant qui se termine par une valeur spécifique comme if ($ ('div [id $ = "' + val + '"]'). Length> 0) exécute quelque chose;
raphie
Eh bien, cela fonctionne bien pour les ID simples de contrôles ci-dessus. Comment le faire fonctionner pour des scénarios comme j'ai des contrôles avec des ID tels que "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city" et ainsi de suite, et je veux le nombre de tous ces éléments ayant des ID comme "txt _ * _ city "
Rajiv Bhardwaj
@Rajiv si vous avez le contrôle sur le html, il serait bon d'ajouter une classe comme "city" à chacun de ces éléments. Vous pouvez alors les compter facilement.
Glen Little
@Rajiv si vous ne pouvez pas améliorer le html, consultez api.jquery.com/multiple-attribute-selector - vous pouvez combiner les sélecteurs. Par exemple, $ ("span [id ^ = 'txt _'] [id $ = '_ city']")
Glen Little
22

Vous devez utiliser l' attribut commence par selector , comme ceci:

$('[id^=list_]').whatever()
SLaks
la source
Eh bien, cela fonctionne bien pour les ID simples de contrôles ci-dessus. Comment le faire fonctionner pour des scénarios comme j'ai des contrôles avec des ID tels que "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city" et ainsi de suite, et je veux le nombre de tous ces éléments ayant des ID comme "txt _ * _ city "
Rajiv Bhardwaj
Salut @Rajiv, bienvenue dans stackoverflow. J'ai répondu à l'autre copie de votre commentaire.
Glen Little
8

Donnez à cet élément un nom de classe commun ou un autre attribut que vous pouvez rechercher.

Yuriy Faktorovich
la source
Bonjour, merci pour votre réponse, le problème avec votre suggestion est qu'il peut y avoir plusieurs tables contenant JQgrid, donc il pourrait y avoir: "LIST_customer", "LIST_carrier" ... et ainsi de suite. Et je dois les sélectionner tous les deux uniquement sur la partie ID initiale: "LIST_".
lidermin
1
Je comprends, mais en faire une classe List me semble une approche plus lisible et plus descriptive. À chacun son propre, vous pouvez toujours utiliser le sélecteur de démarrage avec dans jquery comme indiqué par d'autres réponses.
Yuriy Faktorovich
@lidermin Ce que dit Yuriy devrait fonctionner. Pourquoi n'ajoutez-vous pas une classe à vos contrôles telle que "list" puisque vous avez list_ comme préfixe. Ainsi, lorsque vous sélectionnez cette classe, il obtiendra chacun de ces contrôles. Ce sera la manière la plus efficace de le faire.
Josh Mein
La réponse de Yuriy fonctionnera. Vous pouvez ajouter la même classe (par exemple "ListsINeedToFind") à tous vos éléments "LIST_XXXX", puis les rechercher en utilisant $('.ListsINeedToFind').
Annabelle
Parfois, il est nécessaire d'avoir plusieurs éléments avec la même classe mais des ID différents.
Vincent
1

Pour obtenir un élément se terminant par un certain identifiant / caractère

find('[id$=someid]')

Pour obtenir un élément commençant par un certain identifiant / caractère

find('[id*=anotherid]')

Pour obtenir un élément correspondant à un certain identifiant / caractère

find('[id^=id]')
Haroon Khalid
la source