2016-05-23 2 views
0

Мне нужно выбрать элемент на основе предшествующего комментария HTML. Это в SharePoint 2013 и, к сожалению, я нахожу, что когда я перемещаю контент из POC для тестирования в prod, SP может изменять атрибуты DOM, такие как Title. Единственное, что остается последовательным, - это сгенерированные системой комментарии, которые предшествуют элементу, который мне нужно выбрать. HTML выглядит следующим образом:Используйте jQuery для получения элемента после комментария HTML

<td width="350" class="ms-formbody" valign="top"> 
    <!-- FieldName="Location Name" 
     FieldInternalName="ENV_LocationLookup" 
     FieldType="SPFieldLookup" 
     --> 
     <span dir="none"> 
      <select title="Location Name Required Field" id="ENV_LocationLookup_ebd540c2-1e76-440a-931b-b513ad653d80_$LookupField"> 
       <option value="1">Location 1</option> 
       <option value="2">Location 2</option> 
      </select> 
     </span> 
</td> 

Мне нужна функция, я могу отправить значение FieldInternalName (в данном случае «ENV_LocationLookup») и возвращает значение следующего «выберите» элемент (в данном случае один, где title = "Имя поля местоположения, обязательное для заполнения").

Мне нужно сделать это так, потому что заголовок может измениться, но имя поля в предыдущем комментарии остается постоянным.

Я нашел этот удобный код, который возвращает комментарии, но я не знаю, как искать в нем, а затем найти следующий элемент «select».

$("*").contents().filter(function(){ 
      return this.nodeType == 8; 
     }).each(function(i, e){ 
      alert(e.nodeValue); 
     }); 

Любая помощь оценивается.

ответ

0

Таким образом вы получите id элемента select, который вы хотите, если он следующий после комментариев.

$("*").contents().filter(function(){ 
 
      return this.nodeType == 8; 
 
     }).each(function(i, v){ 
 
      alert($(v).next().find("select").prop('id')); 
 
     });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table><tr><td width="350" class="ms-formbody" valign="top"> 
 
    <!-- FieldName="Location Name" 
 
     FieldInternalName="ENV_LocationLookup" 
 
     FieldType="SPFieldLookup" 
 
     --> 
 
     <span dir="none"> 
 
      <select title="Location Name Required Field" id="ENV_LocationLookup_ebd540c2-1e76-440a-931b-b513ad653d80_$LookupField"> 
 
       <option value="1">Location 1</option> 
 
       <option value="2">Location 2</option> 
 
      </select> 
 
     </span> 
 
</td></tr></table>

+1

Спасибо, Питер. Похоже, это может сработать. Завтра утром я подключу его и посмотрю, как это происходит. –

+0

ОК. Это сделало то, что он должен был делать, но не совсем то, что мне нужно. Я должен был уточнить, что на странице есть еще много элементов с комментариями. Мне нужно выбрать элемент «select» сразу после комментария, содержащего

+0

Кроме того, что такое i и v в этом случае? –

0

Так, опираясь на то, что Петр при условии, я завелся с этим. Там могут быть более элегантные способы, но это работает.

var comment; 
comment = 'FieldInternalName="ENV_LocationLookup"'; 
var locNameElm = findElementAfterComment(comment, "select"); 
alert(locNameElm.val()); 

function findElementAfterComment(text, type) { 
    var nextOfType; 
    $("*").contents().filter(function() { 
     return this.nodeType == 8; 
    }).each(function (i, v) { 
     if (v.text.match(text)) { 
      nextOfType = $(v).next().find(type); 
      return; 
     } 
    }); 
    return nextOfType; 
} 
Смежные вопросы