javascript - 未捕获的类型错误 : undefined is not a function javascript function

标签 javascript jquery typeerror

我编写了“冒泡排序”函数来对图像列表进行排序。我不明白为什么该函数返回“未捕获的类型错误:未定义不是函数”。 谁能帮我吗?

$j(document).ready(function() { 
    var list = $j("dt").find("a").find("img");

    bubbleSort(list, list.size());    
});


function bubbleSort(a, size)
{
    do {
        var swapped = false;
        for (var i = 0; i < size - 1; i++) {
            var img = getAlt(a, i);
            var img2 = getAlt(a, i + 1);

            if (img > img2) {
                var temp = a[i].attr('src');
                a[i].attr('src') = a[i + 1].attr('src');
                a[i + 1].attr('src') = temp;
                swapped = true;
            }
        }
    } while (swapped); // <----- line error
}

function getAlt(list, pos) {
    var img = list[pos].attr("alt");
    img = img.split(' ');
    return img[3];
}

最佳答案

不要使用 list[pos] 使用 list.eq(pos) 因为使用第一个元素你会得到一个原始 HTML 元素(它没有 attr 函数)以及获取 jQuery 对象的第二种方式(它有一个 attr 函数)

还可以使用 list.length 代替 list.size(),因为 size 函数自版本 1.8 起已被弃用

最后正如 M. Page 所说

a[i].attr('src') = a[i + 1].attr('src');

应该是

a.eq(i).attr('src', a.eq(i + 1).attr('src'));

对于类似的陈述也是如此

如果 img 没有 alt 属性,您还应该考虑更改 getAlt 函数

function getAlt(list, pos) {
    var img = list.eq(pos).attr("alt") || "";    
    if(img) {
        img = img.split(' ');
    }
    return img[3] || "";
}

所有这些更改都可以在以下 fiddle http://jsfiddle.net/ejhq03qy/1/ 中找到

关于javascript - 未捕获的类型错误 : undefined is not a function javascript function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26717728/

相关文章:

javascript - 如何从 Tornado 中的嵌套字典和数组中获取参数

javascript - 如何在js中过滤点击元素?

javascript - node.js 中类实例之间的共享数组

javascript - 如何从数组中提取图像并将其放入列表中

c# - 使用 C# 将数据发送到接受 JSON 数据的通用处理程序

javascript - Jquery If/Then 在 Click 函数中?

python - Pandas 合并错误TypeError : '>' not supported between instances of 'int' and 'str'

javascript - Rxjs v6.x 上的类型 'clientX' .ts(2339) 上不存在属性 'Event'

javascript - 类型错误:f 不是函数

javascript - Node js 正在处理第二次或第三次调用