0

与此处提出的问题非常相似:如何在 html 注释中找到包含特定文本的 html 元素?

我希望在包含特定文本的评论之后找到下一个表单输入字段的名称。该表单由 SharePoint 自动生成,因此不再需要操作/添加 id。这是表单片段的示例...

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

注意:SharePoint 在实际表单输入之前的 HTML 注释中为您提供 FieldName、FieldInternalName 和 FieldType。(它还为输入提供了一个疯狂的名称和 ID,但这是一个不同的主题。)

我正在使用 ajax 从另一个项目中提取数据,以便预先填充此表单中的某些字段。我正在遍历表单字段,并且可以使用...成功找到适当的评论

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);}  });

问题是我无法获取输入字段的名称或 ID。我尝试了许多“myInputName = $(this).nextAll("input").attr("name")" 的变体,但它总是以未定义的形式出现。

我在这里做错了什么?

4

1 回答 1

0

我发现nobr在大多数情况下使用标签更容易。

$('nobr:contains("Some Form Field")').closest('tr').find('input').attr('id');

这可以获得表单控件,而不会弄乱自定义函数和注释标签。请注意,“人”选择字段有点棘手,请使用SPServices jQuery 插件来处理这些(和其他东西)。

于 2013-10-18T23:05:10.980 回答