私はjqGridを初めて使用し、編集のためにセルからデータを取得する必要があり、サーバーへのアクセスを避けたいと考えていました。
カスタム フォーマッタは余分なタグをデータに追加し、単純getCell
にすべてのタグも返すため、最初の実装では「手動で」削除することでした:
createColumn: function (val, options) {
return '<div style="white-space:pre-wrap">' // etc.
+ val
+ '</div>';
}
// ...
// Note: rowId is known at this point
var myData = $('#myGrid').jqGrid('getCell',rowId,'myData');
var myDataWrapper = mydata.createColumn('');
data = data.substr(myDataWrapper.length-6,data.length-myDataWrapper.length);
もちろん、誰かがより複雑なタグを追加すると、これは壊れます。getCell
そこで、実際にデータを見つける方法を調べました。残念ながら、現時点では名前を検索するだけなので、コードは次のとおりです。
var n = -1;
val colModel = $('#myGrid').jqGrid('getGridParam','colModel');
for (var i in colModel) {
if (colModel[i].name === 'myData') {
n = parseInt(i)+1;
}
var myData = $('#'+rowId+' td:nth-child('+n+') div').text();
でコードを複製するのは間違っているように見えgetCell
ましたが、名前から列番号を見つける他の方法はないようです (少なくとも、私は見つけられませんでした!)。div
これも、最初のバージョンと同様に、データが single でラップされていることを前提としています。
生成された html を見ると、jqGrid が実際にaria-describedby
(これまでに見たことがない) を使用してセルにタグを付けていることに気付きました。これが常に存在することが保証されている場合、上記は次を使用して実行できます。
var myData = $('#'+rowId+' td:[aria-describedby=myGrid_myData] div').text();
しかし、これはまだデータが単一にラップされているという仮定を使用しておりdiv
、もちろん、jqGrid の将来のバージョンでは、この属性が変更または削除される可能性があります。
そこで、データを でラップして ID を追加する簡単な解決策を試したspan
ので、簡単に見つけることができました。
createColumn: function (val, options) {
return '<div style="white-space:pre-wrap">' // etc.
+ '<span id="' + options.gid + '_' + options.rowId + '_' + options.colModel.name + '">' + val + '</span>'
+ '</div>';
}
// ...
var myData = $('#myGrid_'+rowId+'_MyData').text();
これは最善の方法のように思えますが (私はそれを完全に制御できます)、フォーマッター関数に最初に渡されたデータを取得するためのより良い方法はありますか?追加のタグを追加する必要がありますか?