未捕获的TypeError:undefined不是一个函数javascript函数

未捕获的TypeError:undefined不是一个函数javascript函数,javascript,jquery,typeerror,Javascript,Jquery,Typeerror,我编写了“气泡排序”函数来对图像列表进行排序。我不明白为什么函数返回“UncaughtTypeError:undefined不是函数”。 有人能帮我吗 $j(document).ready(function() { var list = $j("dt").find("a").find("img"); bubbleSort(list, list.size()); }); function bubbleSort(a, size) { do {

我编写了“气泡排序”函数来对图像列表进行排序。我不明白为什么函数返回“UncaughtTypeError:undefined不是函数”。 有人能帮我吗

$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];
}
$j(文档).ready(函数(){
var列表=$j(“dt”).find(“a”).find(“img”);
bubbleSort(list,list.size());
});
函数bubbleSort(a,大小)
{
做{
var交换=错误;
对于(变量i=0;iimg2){
var temp=a[i].attr('src');
a[i].attr('src')=a[i+1].attr('src');
a[i+1].attr('src')=temp;
交换=真;
}
}

}while(swapped);//而不是
list[pos]
使用
list.eq(pos)
,因为第一种方法得到一个原始HTML元素(没有
attr
函数),第二种方法得到一个jQuery对象(有
attr
函数)

也可以使用
list.length
而不是
list.size()
,因为
size
函数从1.8版开始就被弃用了

最后,正如M.佩奇所指出的

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

a.eq(i).attr('src', a.eq(i + 1).attr('src'));
类似的陈述也是如此

在IMG没有ALT属性

的情况下,您还应该考虑更改<代码> GETAL4/COD>函数。
function getAlt(list, pos) {
    var img = list.eq(pos).attr("alt") || "";    
    if(img) {
        img = img.split(' ');
    }
    return img[3] || "";
}

所有这些变化都可以在下面的fiddle中找到,而不是
list[pos]
use
list.eq(pos)
,因为第一种方法得到一个原始HTML元素(没有
attr
函数),第二种方法得到一个jQuery对象(具有
attr
函数)

也可以使用
list.length
而不是
list.size()
,因为
size
函数从1.8版开始就被弃用了

最后,正如M.佩奇所指出的

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

a.eq(i).attr('src', a.eq(i + 1).attr('src'));
类似的陈述也是如此

在IMG没有ALT属性

的情况下,您还应该考虑更改<代码> GETAL4/COD>函数。
function getAlt(list, pos) {
    var img = list.eq(pos).attr("alt") || "";    
    if(img) {
        img = img.split(' ');
    }
    return img[3] || "";
}
所有这些变化都可以在下面的提琴中找到

必须写下:

a[i].attr('src', a[i+1].attr('src'));
下一行也一样

必须写下:

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

与下面的行相同。

哪一行导致错误?a[i].attr('src')=a[i+1].attr('src');和a[i+1].attr('src')=temp;都是无效指令JavaScript对使用二进制排序的数组具有
.sort
。您可以提供自定义排序函数。例如:
[1,2].sort(函数(a,b){return b-a;})什么行导致错误?a[i].attr('src')=a[i+1].attr('src');和a[i+1].attr('src')=temp;都是无效指令JavaScript对使用二进制排序的数组具有
.sort
。可以提供自定义排序函数。例如:
[1,2].sort(函数(a,b){return b-a;});
+1对于第一段,因为这会导致所描述的错误,但是
.size()
是一个受支持的jQuery方法…哦,没关系。刚刚看到它是。所以它确实应该被更改。对不起,我做了修改​​更改了,但代码生成了一个循环。我选择了另一种方法。我将所有的“alt”图像放在一个数组中,然后使用“.sort()+.revert()”。感谢您的更正。第一段为+1,因为这会导致所描述的错误,但是
.size()
是一个受支持的jQuery方法……哦,没关系。只是看到它是。所以它确实应该被更改。对不起,我做了修改​​我选择了另一种方法。我将所有的“alt”图像放在一个数组中,在使用“.sort()+.revert()”之后。感谢您的更正。