未捕获的TypeError:无法调用未定义的方法'split'

时间:2011-11-02 21:03:23

标签: jquery

我正试图在我的网站上加入Quicksand脚本,但我失败了 Firebug给了我这个错误:65 Uncaught TypeError: Cannot call method 'split' of undefined

这个脚本:

jQuery.noConflict();
jQuery(document).ready(function($){
    // Clone applications to get a second collection
    var $data = $("#portfolio-items").clone();

    //NOTE: Only filter on the main portfolio page, not on the subcategory pages
    $('#portfolio-terms ul li').click(function(e) {
        $("ul li").removeClass("active");   
        // Use the last category class as the category to filter by. This means that multiple categories are not supported (yet)
        var filterClass=$(this).attr('class').split(' ').slice(-1)[0];
jquery.custom.js:65 Uncaught TypeError: Cannot call method 'split' of undefined (repeated 6 times)

        if (filterClass == '.all current') {
            var $filteredData = $data.find('#portfolio-');
        } else {
            var $filteredData = $data.find('#portfolio-[data-type=' + filterClass + ']');
        }
        $("#portfolio-items").quicksand($filteredData, {
            duration: 800,
            easing: 'swing',
        });     
        $(this).addClass("active");             
        return false;
    });
});


见这里:http://stakk.it/
错误是什么?

谢谢,抱歉我的英文不好!

2 个答案:

答案 0 :(得分:18)

如果.attr("class")返回undefined,则无法在其上调用.split,因为.splitString对象的一种方法,但不能呼叫undefined。您需要存储.attr("class")的结果,如果不是undefined,则只需将其拆分。

var filterClass = $(this).attr('class');
filterClass = filterClass ? filterClass.split(' ').slice(-1)[0] : '';

现在filterClass将包含您所期望的内容,或空字符串。

修改:您可以将$(this).attr('class')替换为this.className,取消已删除的答案。

答案 1 :(得分:0)

另一种解决方案是使用toString方法

  var filterClass = $(this).attr('class').toString();
   filterClass = filterClass.split(' ');

它对我有用