Prototype.js を使用する古いアプリに jQuery テーブルソーター機能を追加すると問題が発生します。私は TableKit を使用しますが、並べ替えたいテーブルは AJAX コールバックで動的に構築され、TableKit では処理されません。tablesorter キャッシュで更新をトリガーしようとする場合を除いて、正常に動作します。
// Clear the list view
$$('#scrollingList tr.dataRow').each(function(e) {
e.remove();
});
addMapMarkers(); // This function rebuild the sortable table
// triggering update to clear tablesorter cache
jQuery('#soundTable').trigger('update');
「更新」コールバックがエラー table.tBodies[0] をスローすると、未定義です。
私は単純化されたテスト ケースを作成しましたが、prototype.js ライブラリを含めなくても問題なく動作したため、これは jQuery と Prototype の間の互換性の問題であると確信しています。tablesorterを使用するためだけにjQueryですべてを書き直したくはないので、どんな助けも歓迎されます。ありがとう。
これが簡単な例のコードです...
<script type="text/javascript" src="../jquery-latest.js"></script>
<script type="text/javascript" src="../jquery.tablesorter.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery("table").tablesorter();
jQuery("#append").click(function() {
// add some html
var html = "<tr id='deltest' class='data'><td>Peter</td><td>Parker</td><td>28</td><td>$9.99</td><td>20%</td><td>Jul 6, 2006 8:14 AM</td></tr>";
html += "<tr class='data'><td>John</td><td>Hood</td><td>33</td><td>$19.99</td><td>25%</td><td>Dec 10, 2002 5:14 AM</td></tr>";
html += "<tr class='data'><td>Clark</td><td>Kent</td><td>18</td><td>$15.89</td><td>44%</td><td>Jan 12, 2003 11:14 AM</td></tr>";
html += "<tr class='data'><td>Bruce</td><td>Almighty</td><td>45</td><td>$153.19</td><td>44%</td><td>Jan 18, 2001 9:12 AM</td></tr>";
var sorting = [[2,1],[0,0]];
// append new html to table body
jQuery("table tbody").append(html);
jQuery('tr').click(function(){
jQuery(this).remove();
jQuery('table').trigger('update');
jQuery("table").trigger("sorton",[sorting])
})
return false;
});
});
</script>
動的に構築されるテーブルがあり、最初の行にクリック ハンドラーをアタッチしました。テーブルが作成された後に最初の行をクリックすると、その行が削除され、更新がトリガーされます。私が言うように、prototype.js がなくても問題なく動作しますが、含まれている場合は同じエラーが発生しますが、これは jQuery/Prototype の競合を示していると思います。