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