Подтвердить что ты не робот

Плагин jQuery tablesorter pager не работает должным образом с IE11 в режиме Edge

Если вы используете плагин Tablesorter JQuery с добавлением пейджера в таблицу, он не отображает никаких данных. Данные есть, но они скрыты.

Я подозреваю, что метод обнаружения функции браузера плагина не может обрабатывать IE11.

Кто-нибудь еще сталкивается с этим?

4b9b3361

Ответ 1

Кажется, что IE11 имеет проблемы с его userAgent. Оборотом является изменение функции clearTableBody (работающей в jquery.tablesorter-2.0.3.js) следующим образом:

this.clearTableBody = function (table) {
    //if ($.browser.msie) {
        function empty() {
            while (this.firstChild) this.removeChild(this.firstChild);
        }
        empty.apply(table.tBodies[0]);
    //} else {
    //    table.tBodies[0].innerHTML = "";
    //}
};

Ответ 2

Это связано с тем, что Internet Explorer 11 имеет строку пользовательского агента, которая не включает "MSIE", поэтому jQuery не идентифицирует ее должным образом (см. этот вопрос).

Но действительно, код TableSorter Pager не обязательно должен знать, в каком браузере выполняется код. Измените функцию clearTableBody, чтобы вместо этого использовать кросс-браузерную реализацию jQuery:

this.clearTableBody = function(table) {
    $(table.tBodies[0]).empty();
};

Я тестировал это в IE8, IE9, IE11, Chrome 31 и Firefox 24.

(И только сейчас я нашел репозиторий GitHub с вилкой TableSorter, который, возможно, исправил это уже: https://github.com/Mottie/tablesorter)

Ответ 4

Одно простое изменение - измените строку в jquery.tablesorter.js из if($.browser.msie) to:

if(/msie/.test(navigator.userAgent.toLowerCase()) || window.navigator.userAgent.indexOf("Trident/7.0") > 0) работает для меня.

/msie/.test(navigator.userAgent.toLowerCase()) обнаруживает IE версии 10 или ниже. window.navigator.userAgent.indexOf("Trident/7.0") > 0 обнаруживает IE 11.