调用jQuery.fn.load时是可以在url后面加选择器来指定加载的内容的。文档里这样描述:
创新互联建站是一家从事企业网站建设、网站设计、成都做网站、行业门户网站建设、网页设计制作的专业网站设计公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点千余家。
默认使用 GET 方式 - 传递附加参数时自动转换为 POST 方式。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some > selector"。请查看示例。
|
不过有一个问题,如果指定了选择器,页面里的脚本就不会执行,查看了jQuery的代码之后发现,原来是有选择器的时候,将所有脚本过滤掉了
jQuery 1.8.3源码两个片段:
|
那么,如果想执行页面中的脚本,只需要找到页面内容中的脚本再执行一次就行了。在load的callback中,是可以取到整个页面内容的,所以只需要一句话就可以解决:
- $("#place_holder").load("Page.html #content", function(html) {
- // 加载html内容到页面上,里面的css和script都会执行
- // 加载之后即把当前的临时DIV删掉(没验证,如果有问题可以不remove)
- $("<div>").html(html).remove();
- });
不过既然jQuery要把脚本过滤掉就有它的道理……因为html里的css和script有可能会有一部分是不想调用的,怎么处理呢?用与jQuery过滤script的类似的办法,把所有script找出来,再选出需要执行的来执行。
于是,约定,在script中加入一个属性loadinvoke="true"的会在加载内容后执行,如定义这样的<script>:
- <script type="text/javascript">
- console.log("这是不需要jQuery.fn.load时执行的脚本")
- </script>
- <script type="text/javascript" loadinvoke="loadinvoke">
- console.log("这是需要jQuery.fn.load时执行的脚本")
- </script>
给加载的脚本加点料:
- rscript = /<script\b[^>]*\b loadinvoke \b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
- $("#place_holder").load("Page.html #content", function(html) {
- // 找出符合条件的脚本
- var m = html.match(rscript);
- for (var i = 0; i < m.length; i++) {
- // 生成临时的div执行脚本
- $("<div>").html(m[i]).remove();
- }
- });
抛砖引玉
分享题目:jQuery.fn.load调用时给url加selector之后执行脚本的方法
标题URL:https://www.cdcxhl.com/article8/ghsiop.html
成都网站建设公司_创新互联,为您提供用户体验、云服务器、搜索引擎优化、面包屑导航、、响应式网站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联