Код не совместим с IE? - PullRequest
       5

Код не совместим с IE?

0 голосов
/ 25 августа 2009
$(document).ready(function() {
    var url = document.location.toString();
    $('.tab').click(function() {
        if($(this).is(".active")) {
            return;
        }

        var classy = $(this).attr("class").split(" ").splice(-1);
        var innerhtml = $('.content.'+classy).text();
        $('#holder').html(innerhtml);
        $('.tab').removeClass('active');
        $(this).addClass('active');
    });

    var url = document.location.toString();

    if(url.match(/#([a-z])/)) {
        //There is a hash, followed by letters in it, therefore the user is targetting a page.  
        var split = url.split("#").splice(-1);
        $('.tab.'+split).click();
    }
    else {
        $('.tab:first').click();
    }
});

Эй, один из моих комментаторов только что сообщил мне, что этот код не работает в IE. Я не могу на всю жизнь понять, почему. При каждом переключении вкладок содержимое вкладки не изменяется. Между тем содержимое #holder div - это все объединенные вкладки.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 25 августа 2009

Не тот ответ, который вам нужен, но я бы серьезно рекомендовал заглянуть в виджет jQueryui tabs , если можете. Это сделало мою жизнь намного легче, по крайней мере, иметь дело с этим материалом.

1 голос
/ 25 августа 2009

Трудно сказать без версии IE и страницы, чтобы посмотреть, что именно происходит, но вот некоторые лучшие предположения:

изменение:

if($(this).is(".active")) {

до:

if($(this).hasClass("active")) {

изменение:

var innerhtml = $('.content.'+classy).text();

до:

var innerhtml = $('.content .'+classy).text(); // note the space

изменение:

var url = document.location.toString();

до:

var url = document.location.hash;
0 голосов
/ 25 августа 2009

Я сделал все изменения, которые предложил Райан, за исключением добавления пробела между '.content' и периодом, как это необходимо. Он не мог знать без исходного кода.

Я изменил ваш .splice (-1) на [1], так что я выбираю второй элемент в массиве, который является именем класса. Похоже, что .splice (-1) ведет себя по-разному в IE и других браузерах.

Я протестировал код с IE 7-8, и он работает.

Исходный код, как сейчас:

$(document).ready(function() {
    var url = document.location.hash;

    $('.tab').click(function() {
        if ($(this).hasClass("active")) {
            return;
        }

        var classy = $(this).attr("class").split(" ")[1];
        var innerhtml = $('.content.' + classy).text();

        $('#holder').html(innerhtml).slideDown("slow");

        $('.tab').removeClass('active');
        $(this).addClass('active');
    });

    if (url.match(/#([a-z])/)) {
        //There is a hash, followed by letters in it, therefore the user is targetting a page.  
        var split = url.split("#")[1];
        $('.tab.' + split).click();
    }
    else {
        $('.tab:first').click();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...