代码与IE不兼容?

时间:2009-08-25 18:50:02

标签: javascript jquery tabs

$(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 个答案:

答案 0 :(得分:3)

不是您所追求的答案,但如果可以,我会seriously recommend查看jQueryui tabs widget。这让我的生活很多更容易处理这些东西。

答案 1 :(得分:1)

很难说没有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;

答案 2 :(得分:0)

我做了Ryan建议的所有更改,只是在'.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();
    }
});