src与attr(src,...)之间有什么区别?

时间:2014-11-07 23:15:14

标签: javascript jquery src attr

src和attr(' src',variableName)有什么区别?在我看来,我做同样的事情。为图像源属性指定值。

我正在编写一些jQuery并且在一个地方src工作,但不在另一个地方,而在另一个地方,attr(' src',variableName)工作,而另一个没有'吨。

这是我的代码:

$( document ).ready( function() {
    function imageSnap() {
        $( 'p img' ).each( function() {

            // Store image selector
            var image = $( this );

            // Store image source
            var imageSrc = image.attr('data-src');

            // Create new image and assign image source
            var newImage = new Image();
            newImage.src = imageSrc; //                    HERE // works
            //newImage.attr( 'src', imageSrc );                 // doesn't work

            // Execute on image load
            image.load( function() {

                // Store native image dimensions
                var nativeWidth = newImage.width;
                var nativeHeight = newImage.height;


                // more code stuffs


                console.log( 'nativeWidth ' + nativeWidth );
                console.log( 'nativeHeight ' + nativeHeight );
            });

            // Load image
            //image.src = imageSrc;                   AND HERE // doesn't work
            image.attr('src', imageSrc );                      // works
        });
    }

    // Execute on document ready
    imageSnap();
});

3 个答案:

答案 0 :(得分:3)

他们是同一件事,但第一件事(.src)不起作用,因为$(this)是从jQuery选择器中提取的($(this)是你的{ {1}}变量)和image是来自原生JavaScript的方法,jQuery在您使用其选择器时无法识别。

答案 1 :(得分:2)

var newImage = new Image();
newImage.src = imageSrc; // works
//newImage.attr( 'src', imageSrc ); // doesn't work

这不起作用,因为var newImage = new Image();不是jquery语法。因此,它不会创建对jquery对象的引用,因此作为jquery方法的方法.attr()将不起作用。但是.src会因为那是标准的js。

var image = $( this );

这是引用jquery对象。因此,当您稍后在其上调用.attr()时,它将按预期分配。

答案 2 :(得分:1)

简单的答案是,newImageimage不是同一个对象。第一个是类型为Image()的对象,其变量为src,而第二个是JQuery集合对象,其src属性位于内部,可通过attr访问功能