Jan 08, 2011
[Cloud] <apex:*> タグを jQuery で操作する
Salesforce の Visualforce Page で利用できる <apex:*> タグ (<apex:outputText>, <apex:outputPanel>, etc) は HTML にレンダリングされた際に少々クセのある ID を持つ。 jQuery にその ID を利用する方法をメモ。
apex タグは HTML にレンダリングされる際、(自動割り当てを含む) ID を持つ直近の親の ID と自身の ID を結合した文字列を HTML タグの ID として付与される。 例えば、下記の <apex:outputPanel> は HTML では "page:form:block:panel" という ID を持つ <div> タグとして展開される。
<apex:page id="page" >
<apex:form id="form" >
<apex:pageBlock id="block" >
<apex:outputPanel layout="block" id="panel" />
</apex:pageBlock>
</apex:form>
</apex:page>
この "page:form:block:panel" を $("#page:form:block:panel") の様にそのまま jQuery の selector として利用しても動作しない。
selector で特殊な意味を持つ ":" をエスケープすることで jQuery でも利用可能となる。
上記の例では、$("#page\:form\:block\:panel") となる。
サンプル
<apex:page id="page" >
<apex:includeScript value="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"/>
<apex:form id="form" >
<apex:pageBlock id="block" >
<apex:outputPanel layout="block" id="panel" />
<script type="text/javascript" language="javascript">
var jq$ = jQuery.noConflict();
function escapeVisualforceId(vfid) {
return vfid.replace(/:/g,'\\:');
}
jq$(document).ready(function() {
jq$('#' + escapeVisualforceId('page:form:block:panel')).text("Hello World");
});
</script>
</apex:pageBlock>
</apex:form>
</apex:page>



