为什么这个.each函数运行错误

时间:2016-07-20 09:08:50

标签: javascript jquery html5

我有此功能可以打印具有属性<img>的所有[proto]的图像尺寸。

当我使用这个each方法尝试该函数时,它只返回一个函数。

错误是什么?

function size(){
    var $img = $('img[proto]');
    $($img).each(function(){
        var height = $(this).height;
        var width = $(this).width;
        $(this).parent().find('p').remove();
        $(this).parent().append('<p class="size">' + width + '-' + height + '</p>');

    });
}
size();

2 个答案:

答案 0 :(得分:8)

这些功能不是属性,高度和宽度:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\8003cdd3\a3d802bd\App_Code.k3skken3.dll

答案 1 :(得分:0)

  1. 更改元素声明。因为你这样做:$($('img[proto]'))。这样你可以将元素两次转换为jQuery。
  2. widthheight是函数,而不是属性。所以你需要添加括号。
  3. function size() {
        $('img[proto]').each(function() {
            var height = $(this).height(),
                width = $(this).width();
            $(this).parent().find('p').remove();
            $(this).parent().append('<p class="size">' + width + '-' + height + '</p>');
        });
    }
    
    size();
    

    我甚至更愿意只获得一次所需的元素。你这样做的方式是将this四次转换为jQuery对象,并为父级搜索两次。表现可以保存。

    var element = $(this),
        parent = element.parent(),
        height = element.height(),
        width = element.width();
    
    parent.find('p').remove();
    parent.append('<p class="size">' + width + '-' + height + '</p>');
    

    如果你想直接执行这个功能,你可以使用IIFE或只是删除它周围的函数并直接执行它。

    (function() {
        $('img[proto]').each(function() {
            // ...
        });
    })();