2016-05-23 5 views
0

先行するHTMLコメントに基づいて要素を選択する必要があります。これはSharePoint 2013にあります。残念ながら、POCからテストするためにコンテンツを移動すると、SPはTitleなどのDOM属性を変更できることがわかりました。一貫しているのは、選択する要素の前にシステムで生成されたコメントです。私はFieldInternalName(この場合は「ENV_LocationLookup」)の値を送信し、次の「選択」の要素(この場合は1の値を返すことができる機能を必要とする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> 

:ようなHTMLが見えますtitle = "ロケーション名必須フィールド")。

タイトルは変更できますが、前のコメントのFieldInternalNameは一定のままなので、この方法で行う必要があります。

コメントを返す便利なコードが見つかりましたが、その中で検索して次の「選択」要素を見つける方法がわかりません。

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

助けてください。

答えて

0

このようにして、コメントの次のものである限り、select要素のidを取得できます。

$("*").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

OK。それはそれがやろうとしていたことをしましたが、私が必要とするものではありませんでした。コメントがあるページにはもっと多くの要素があることを明確にすべきでした。

+0

を含むコメントの直後に "select"要素を選択する必要がありますまた、このインスタンスでは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; 
} 
関連する問題