ID se Termine Avec en Javascript
Je travaille dans une bibliothèque Javascript qui apporte en jQuery pour une chose: "se termine par" sélecteur. Il ressemble à ceci:
$('[id$=foo]')
Il trouvera les éléments dans lesquels le id
se termine par "foo".
Je suis à la recherche pour ce faire sans jQuery (droite JavaScript). Comment pourriez-vous aller à ce sujet? J'aimerais aussi qu'il soit aussi efficace que possible.
Pouvez-vous fournir plus d'informations ? Ce genre d'éléments dom ciblez-vous ? Est-il juste de DIVs et s'étend sur ou quoi que ce soit ?
Aussi loin que je peux dire, elles sont toutes les balises input, mais la requête ci-dessus ne précise pas que. Je suis re-travail une bibliothèque existante, donc je ne peux pas être complètement sûr.
Aussi loin que je peux dire, elles sont toutes les balises input, mais la requête ci-dessus ne précise pas que. Je suis re-travail une bibliothèque existante, donc je ne peux pas être complètement sûr.
OriginalL'auteur Brian Genisio | 2011-03-09
Vous devez vous connecter pour publier un commentaire.
Utilisation
querySelectorAll
, pas disponible dans tous les navigateurs (IE 5/6/7/8) si. Il fonctionne essentiellement comme jQuery:http://jsfiddle.net/BBaFa/2/
Dans quels navigateurs fonctionne-t-cela?
Utilisation
[attribute^=value]
pour les éléments dont la attribut valeur commence par un valeur.OriginalL'auteur pimvdb
Vous aurez besoin pour itérer sur tous les éléments sur la page, puis utilisez les fonctions de chaîne pour le tester. Les seules optimisations que je peux penser à est de changer le point de départ, c'est à dire pas
document.body
mais un autre élément où vous savez que votre élément sera un enfant de - ou vous pouvez utiliserdocument.getElementsByTagName()
pour obtenir un élément de la liste si vous connaissez le nom de la balise de l'élément.Cependant, votre tâche serait beaucoup plus facile si vous pouvez utiliser quelques 3rd-party-javascript, par exemple Grésillement (4k minifiés, le même sélecteur moteur jQuery utilise).
OriginalL'auteur ThiefMaster
Donc, à l'aide de tout ce qui a été dit, j'ai mis en place ce code. En supposant que ma éléments sont tous
input
s, alors le code suivant est probablement le meilleur que je vais obtenir?Je l'ai mis sur JsFiddle: http://jsfiddle.net/MF29n/1/
OriginalL'auteur Brian Genisio
@ThiefMaster touché sur la façon dont vous pouvez effectuer l'enregistrement, mais voici le code:
Cela peut être améliorée dans un certain nombre de façons. Actuellement, il parcourt la ensemble dom, mais serait plus efficace si elle avait un contexte:
Il n'y a pas de validation/échappent sur le
str
variable dans cette fonction, l'hypothèse est qu'il ne recevrez une chaîne de caractères.OriginalL'auteur zzzzBov
Suggéré des modifications à votre réponse:
http://jsfiddle.net/mattball/yJjDV/
La mise en œuvre de
String.endsWith
à l'aide d'une regex au lieu deindexOf()
est surtout une question de préférence, mais j'ai pensé qu'il était utile notamment pour la variété. Si vous n'êtes pas préoccupé par l'échappement des caractères spéciaux dans le suffixe, vous pouvez supprimer leRegExp.quote()
peu, et il suffit d'utilisernew RegExp(suffix + '$')
.OriginalL'auteur Matt Ball
Si vous connaissez le type des éléments du DOM que vous ciblez,
puis obtenir une liste de références à l'aide de
getElementsByTagName
, puis itérer sur eux.Vous pouvez utiliser cette optimisation pour fixer les itérations:
ignorer les éléments n'ayant pas d'identité.
la cible la plus proche parent connu d'éléments que vous souhaitez rechercher, disons que votre élément est à l'intérieur d'un div avec id='myContainer', alors vous pouvez obtenir un sous-ensemble restreint à l'aide de
document.getElementById('myContainer').getElementsByTagName('*')
, puis itérer sur eux.OriginalL'auteur DhruvPathak