在注释标记之后查找下一个输入元素

时间:2013-10-17 21:33:08

标签: jquery sharepoint

与此处提出的问题非常相似:How can I find html elements that contain specific text in an html comment?

我想在包含特定文本的评论后找到下一个表单输入字段的名称。表单由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“)”但它始终是未定义的。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

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

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

这可以获得表单控件,而不会搞乱自定义函数和注释标记。请注意,“人物”选择字段有点棘手,请抓住SPServices jQuery plugin以使用这些(以及其他内容)。