У меня возникают проблемы при добавлении функции сортировщика таблиц jQuery в старое приложение, использующее Prototype.js. Я бы использовал TableKit, но таблица, которую я хочу отсортировать, создается + динамически очищается в обратном вызове AJAX, что TableKit не обрабатывает. Работает нормально, за исключением тех случаев, когда я пытаюсь инициировать обновление кеша сортировщика таблиц:
// 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] is undefined.
Я придумал упрощенный тестовый пример, и он работал нормально, если я не включу библиотеку Prototype.js, так что я почти уверен, что это вопрос совместимости между jQuery и Prototype.Я действительно не хочу переписывать все это на jQuery только для того, чтобы использовать Tablesorter, поэтому любая помощь будет принята с благодарностью. Спасибо.
Вот код простого примера...
<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>
У меня есть таблица, которая строится динамически, я прикрепил обработчик кликов к первой строке. Щелчок по первой строке после построения таблицы удаляет строку и запускает обновление. Как я уже сказал, отлично работает без прототипа.js, получает ту же ошибку, если она включена, что, я думаю, указывает на конфликт jQuery/Prototype.