jquery load方法有什么缺陷

jquery load方法的缺陷:1、load方法会自动忽略掉head、body、script标签;2、动态加载后会出现滚动条偏移的问题,只需在load方法的回调函数里面加入“$(document).scrollTop(0);”即可解决;3、由于网络延迟等问题,先执行哪句代码并不确定;4、有缓存问题;5、会出现结构破坏问题。

jquery load方法有什么缺陷

本教程操作环境:windows7系统、jquery3.6版本、Dell G3电脑。

jquery load()方法可以帮我们把页面重复的文档部分,比如标题栏和底部信息部分。我们可以提取到一个模板html,然后通过load方法动态加载到每个页面。在使用的过程中遇到几个问题

缺陷1:load方法会自动忽略掉head、body、script标签

1、如果想加载head和body里面的文档内容,可以通过将内容包裹在一个div中,然后将其加载过来

2、script部分我们可以通过load方法的回调函数动态创建加载进来

3、不建议动态加载样式表,否则会出现页面闪现的问题,即页面刷新时,出现1秒钟没渲染样式的画面,然后再恢复正常画面(原因同下)

缺陷2:动态加载后会出现滚动条偏移的问题

刷新页面时。滚动条偏移。
一般情况下,我们会把script文件放在文档body最后面,避免js阻塞浏览器渲染,这就导致我们会在页面渲染完后再执行我们的load方法,动态加载的页面也就是最后才加上去的,滚动条一开始就是固定在最上面的,动态加载header部分后,滚动条会偏下,并没有回到顶部

解决

在load方法的回调函数里面加入$(document).scrollTop(0);

或者利用script标签的async属性,让js脚本异步加载,然后即可将script放在头部

缺陷3: 异步加载问题

由于load是异步触发的,以下方法中的2行代码都是同时并发执行的,由于网络延迟等问题,哪句先执行并不确定.

而id为templateId的

init元素又是通过load加载进来的.

如果是后面第3行的$(“#templateId”).html(“hellow”);先执行,那么由于$(“#templateId”)找不到(此时尚未加载完div),其实并不会执行html(“hellow”)操作.

function load(targetId,templateName) {    $("#"+targetId).load(contextPath+templateName);    $("#templateId").html("hello");}

登录后复制

缺陷4: 缓存问题

由于很多浏览器为了降低请求服务器的负荷,做了同样的请求地址,从本地缓存取历史数据的优化.所以我们需要在地址后面添加一些动态后缀.

        function load(targetId,templateName) {            var nowDate = new Date();            var randomId = nowDate.getTime();//防缓存            $("#"+targetId).load(contextPath+templateName+"?"+randomId);        }

登录后复制

缺陷5: 结构破坏问题

在陷阱1(缓存问题)的基础上,可能还会遇到更深层次的问题,那就是当我们load加载得到的数据如果不符合规范,那么就会破坏原有的dom结构,导致后续取dom和其它节点异常.

比如原有

     test       

登录后复制

如果load得到的数据为

那么最终生成了为不规则的html闭包.下次再取dom时可能取不到了,因为破坏了原有的结构

     test      

登录后复制

此时我们可以改成

function load(targetId,templateName) {            var nowDate = new Date();            var randomId = nowDate.getTime();//防缓存            $("#"+targetId).load(contextPath+templateName+"?"+randomId,{},function (responseTxt){                $("#"+targetId).val(responseTxt);            });        }

登录后复制

此时生成的html元素不会作为dom节点,而是作为文本域的原始文本插入,也就没有破坏原始dom.所以下次取值还是正常的

nbsp;html>     test      

登录后复制

【推荐学习:jQuery视频教程、web前端视频】

以上就是jquery load方法有什么缺陷的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2921271.html

(0)
上一篇 2025年3月11日 18:26:57
下一篇 2025年2月26日 02:57:47

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • jquery的toggle()方法有什么用

    toggle()方法可用于切换被选元素的hide()与show()方法,进而控制元素的显示和隐藏,语法“$(selector).toggle(speed,callback)”;也可用于绑定两个或多个事件处理器函数,以响应被选元素的轮流的cl…

    2025年3月11日
    200
  • jquery怎么修改tr属性值

    jquery修改tr属性值的方法:1、利用jquery选择器获取指定tr元素,语法“$(“选择器”)”,会返回包含指定tr元素的jquery对象;2、使用attr()函数修改指定tr元素对象的属性值,语法“tr元素对…

    2025年3月11日
    200
  • jquery怎么改变style样式

    jquery改变style样式的方法:1、利用css()给指定元素设置新style样式即可,语法“$(selector).css({“属性名1″:”属性值1″,”属性名2&#824…

    2025年3月11日
    200
  • 可用jquery在div中添加标签吗

    用jquery可以在div中添加标签。4种方法:1、使用append()在div元素的结尾插入子标签,语法“$(“div”).append(元素)”;2、使用prepend()在div元素的开头插入子标签,语法“$(…

    2025年3月11日 编程技术
    200
  • js怎么动态改变css关键帧

    js动态改变css关键帧的方法:1、通过“document.styleSheets”接口获取网页上引入的link样式表和style样式表;2、通过“insertRule(rule,index)”方法插入新的“@keyframes”规则即可。…

    2025年3月11日 编程技术
    200
  • es6 修饰器是干什么用

    在es6中,修饰器用来注释或修改类和类的方法,依赖于ES5的“Object.defineProperty”方法,写法为“@函数名”;修饰器其实就是一个函数,通常放在类和类方法的前面。修饰器可以注入到类、方法、属性参数上来扩展类、属性、方法、…

    2025年3月11日
    200
  • javascript中文乱码怎么办

    javascript中文乱码的解决办法:1、利用txt文本的“另存为”设置编码为“utf-8”格式;2、在js的加载代码中添加编码“charset=”utf-8″”;3、对全路径进行过滤时,通过“if (URI.co…

    2025年3月11日
    200
  • jquery不显示图片背景怎么办

    jquery不显示图片背景是因为路径不正确,其解决办法:1、打开相应的js文件;2、通过“let src=’clock/img/afternoon.png’;them_icons.css(‘backgro…

    2025年3月11日
    200
  • jquery怎么删除最后一个子元素

    jquery删除最后一个子元素的方法:1、新建一个html文件,并在script标签内创建一个数组;2、在script标签内,使用pop()方法删除数组最后一个元素,并通过alert方法输出结果即可。 本教程操作环境:Windows10系统…

    2025年3月11日 编程技术
    200
  • jquery load js丢失怎么办

    jquery load js丢失的解决办法:1、在a.html的js脚本中,使用load加载全部b.html即可使b.html中的js脚本生效,代码如“$(‘selector’).load(‘b.html…

    2025年3月11日
    200

发表回复

登录后才能评论