与此处提出的问题非常相似: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“)”但它始终是未定义的。
我在这里做错了什么?
答案 0 :(得分:0)
我发现在大多数情况下使用nobr
标记会更容易。
$('nobr:contains("Some Form Field")').closest('tr').find('input').attr('id');
这可以获得表单控件,而不会搞乱自定义函数和注释标记。请注意,“人物”选择字段有点棘手,请抓住SPServices jQuery plugin以使用这些(以及其他内容)。