/ / Recherche de l'élément d'entrée suivant après la balise de commentaire - jquery, sharepoint

Recherche du prochain élément d'entrée après la balise de commentaire - jquery, sharepoint

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 № 1

J'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).