有什么办法可以解决jq修改图片src后图片资源加载两次的问题?

html代码:

<img src="a.jpg" class="banner">

jq代码:

$(document).ready(function () {
    $(".banner").attr("src","2.jpg");
})

jq代码生效,成功地把图片a.jpg改成b.jpg。但现在有个问题是请求资源的时候会把a.jpg和b.jpg一并加载,当图片资源比较多要替换的时候,会影响性能。有没有什么办法,在img还未加载完成之前,通过jq把src的路径修改却不加载原来的a.jpg这个图片呢?

阅读 10.7k
17 个回答

虽然没怎么看懂你的问题,但是我想说解决此类问题通常采用的方式是js的代理模式,参考代码如下

var myImage = (function(){
        var imgNode =document.getElementByClassName('banner')[0];
        return function(src){
            imgNode.src = src; 
        }
})();

var ProxyImage = (function(){
        var img = new Image();
        img.onload = function(){
            myImage(this.src);
        };
        return function(src) {
            myImage("a.jpg");
            img.src = src;
        }
    })();

ProxyImage("b.jpg");

原谅我原生风,你可以稍微改一下

<img src="a.jpg" class="banner">
一开始这里一定要有值是吗?

如果在刚开始的<img src="a.jpg" class="banner"> 这里不需要显示图片的话 可以去掉src="a.jpg",这样就不会加载a.jpg了
代码如下:
<img class="banner">

也許 ajax ...

    var img_target = [
        {"target": "https://static.orderplus.com.tw/img/logo.png", "new": "http://aa.com/a.jpg"}
    ];

    $.ajax({
        url: "index.html",
        context: document.body
    }).done(function (html) {
        $.each(img_target, function (n) {
            var item = img_target[n];
            html = html.replace(
                'src="' + item["target"] + '"',
                'data-src="' + item["target"] + '" src="' + item["new"] + '"');
        });
        console.log(html);
    });

不在src里设值,设在--default里咯。

一楼正解,图片延时加载

后来既然敢推过来,就可以在append之前拦截,修改可以

从没见过这种伪需求

你这么写当然加载2次。

无解,原图片想用又不想加载,可能不....

使用图片预加载技术

楼主问题没说清楚,是js修改后同步加载图像导致页面加载变慢,搞成异步就好啦。

<img>元素如果有src属性,只要<img>元素在dom树中解析了,就会发送请求的。

你这个的话,要是必须初始HTML结构中有img标签,可以不写src属性。或者js代码执行过程中动态创建img元素添加到dom树中。

不想加载就不要写img,或者不要写src属性;想加载的时候动态写入img或者src属性。

注:img只有在有src属性或者在src属性有值的时候才会请求资源。

img标签如果写了src就会加载资源

HTML那边不要设置src属性,可以换成data-src,再用js判断按需加载

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏