Voici un exemple de mon formulaire (seulement les entrées que je veux, mais il y en a beaucoup d'autres):
<form name="inputform" action="..." method="post">
<input type="hidden" name="id_qtedje_77" id="id_qtedje_77" value="0">
<input type="text" id="id_qte_77" name="prestation_detail_fields[77][qte_collecte]" value="0.00">
<input type="text" id="id_rec_77" name="prestation_detail_fields[77][reliquat_conforme]" value="0.00">
<input type="text" id="id_ren_77" name="prestation_detail_fields[77][reliquat_non_conforme]" value="0.00">
<input type="checkbox" name="prestation_detail_fields[77][dechet_non_present]" value="1">
<!-- another TR -->
<input type="hidden" name="id_qtedje_108" id="id_qtedje_108" value="0">
<input type="text" id="id_qte_108" name="prestation_detail_fields[108][qte_collecte]" value="0.00">
<input type="text" id="id_rec_108" name="prestation_detail_fields[108][reliquat_conforme]" value="0.00">
<input type="text" id="id_ren_108" name="prestation_detail_fields[108][reliquat_non_conforme]" value="0.00">
<input type="checkbox" name="prestation_detail_fields[108][dechet_non_present]" value="1">
</form>
Ce que je veux, c'est obtenir des valeurs d'entrées, mais comme le formulaire est construit en PHP, je ne connais pas l'identifiant de ligne (77, 108).
Existe-t-il un moyen de faire quelque chose comme getElementByName('id_qtedje_%')
?
Remarque: je n'utilise aucune bibliothèque et je n'envisage pas d'en utiliser une.
Votre meilleur pari est probablement document.querySelectorAll
, avec lequel vous pouvez utiliser n'importe quel sélecteur CSS, y compris un sélecteur "l'attribut commence par" comme input[id^="id_qtedje_"]
. C'est pris en charge sur tous les navigateurs modernes, et aussi IE8 :
var elements = document.querySelectorAll('input[id^="id_qtedje_"]');
Si vous vouliez juste la première correspondance (plutôt qu'une liste), vous pouvez utiliser document.querySelector
au lieu. Il renvoie une référence à la première correspondance dans l'ordre du document, ou null
si rien ne correspond.
Alternativement, vous pouvez donner aux éléments un nom de classe, puis utiliser document.getElementsByClassName
, mais notez que tandis que getElementsByClassName
était pris en charge dans les anciennes versions de Chrome et Firefox, IE8 ne l'a pas, donc c'est pas comme bien supporté comme le querySelectorAll
le plus utile de l'ère moderne.
var elements = document.getElementsByClassName("theClassName");
Si vous utilisez des bibliothèques (jQuery, MooTools, Closure, Prototype, etc.), elles sont susceptibles d'avoir une fonction que vous pouvez utiliser pour rechercher des éléments à peu près n'importe quel sélecteur CSS, comblant les lacunes de la prise en charge du navigateur avec leur propre code . Par exemple, dans jQuery, c'est le $
(jQuery
) fonction; dans MooTools et Prototype, c'est $$
.
Vous pouvez utiliser le commence par le sélecteur dans jQuery
var listOfElements = $('[name^="id_qtedje_"]')
Vous pouvez également être intéressé par les sélecteurs contient et se termine par
En utilisant querySelectorAll
, vous pouvez faire
document.querySelectorAll ('[name ^ = "id_qtedje_"]')
Alternativement:
En supposant que tous les éléments sont input
s, vous pouvez utiliser ceci:
function getElementByNameStart(str){
var x=document.getElementsByTagName('input')
for(var i=0;i<x.length;i++){
if(x[i].indexOf(str)==0){
return x[i];
}
}
}
qui peut être appelé comme getElementByNameStart ("id_qtedje_")
Notez que cela ne renvoie que le premier élément de ce type. Pour tout retourner:
function getElementByNameStart(str){
var x=document.getElementsByTagName('input')
var a=[];
for(var i=0;i<x.length;i++){
if(x[i].indexOf(str)==0){
a.Push(x[i])
}
}
return a;
}
Si les éléments sont de n'importe quel type, remplacez "input" par "*" (attention, cela peut ralentir votre code)