Très similaire à la question posée ici : Comment puis-je trouver des éléments HTML contenant un texte spécifique dans un commentaire HTML ?
Je cherche le nom de la prochaine saisie du formulairechamp après un commentaire contenant un texte spécifique. Le formulaire est automatiquement généré par SharePoint, donc la manipulation/l'ajout d'identifiants est impossible. Voici un exemple d'extrait de formulaire...
<tr>
<td nowrap="true" valign="top" width="190px" class="ms-formlabel">
<h3 class="ms-standardheader">
<nobr>Some Form Field</nobr>
</h3>
</td>
<td valign="top" class="ms-formbody">
<!-- FieldName="My Field Name" FieldInternalName="MyFieldName" FieldType="SPFieldText" -->
<span dir="none">
<input name="ctl00$PlaceHolderMain$idDocSetDisplayFormWebPart$ctl00$ctl02$ctl08$ctl00$ctl00$ctl04$ctl00$ctl00$TextField" type="text" maxlength="255" id="ctl00_PlaceHolderMain_idDocSetDisplayFormWebPart_ctl00_ctl02_ctl08_ctl00_ctl00_ctl04_ctl00_ctl00_TextField" title="Field Name" class="ms-long ms-spellcheck-true" /><br />
</span>
</td>
Note:SharePoint vous donne le FieldName, le FieldInternalName et le FieldType dans un commentaire HTML précédant la saisie réelle du formulaire. (Cela donne également à l'entrée un nom et un identifiant fous, mais c'est un sujet différent.)
J'utilise ajax pour extraire des données d'un autre élément afin de pré-remplir certains champs de ce formulaire. Je parcourt les champs du formulaire et je parviens à trouver le commentaire approprié en utilisant...
function fnFindThisComment(){
var myFieldInternalName = "FieldInternalName="MyFieldName""; // hardcoded for example purposes
$("*").contents().filter(function(){ return this.nodeType == 8; }).each(function(i, e){
match = this.innerHTML.match(myFieldInternalName) ;
if (match){alert(match);} });
Le problème est que je ne parviens pas à obtenir le nom ou l'identifiant du champ de saisie. J'ai essayé de nombreuses variantes de "myInputName = $(this).nextAll("input").attr("name")" mais cela vient toujours comme indéfini.
Que fais-je mal ici?
Réponses:
0 pour la réponse № 1J'ai trouvé en utilisant le nobr
la balise est plus facile dans la plupart des cas.
$("nobr:contains("Some Form Field")").closest("tr").find("input").attr("id");
Cela permet d'obtenir le contrôle du formulaire sans se soucier des fonctions personnalisées et des balises de commentaires. Veuillez noter que les champs de sélection « Personne » sont un peu plus délicats, saisissez le Plugin jQuery SPServices pour travailler avec ceux-ci (et d’autres choses).