jquery load() 去除脚本标签 - 解决方法?

标签 jquery tags load

有人知道 jquery .load() 的解决方法,可以去除从外部内容加载的脚本标签吗?

有很多文档证明这种情况发生,但在网上搜索了大约 4 个小时后我找不到解决方法?

我正在加载动态生成的 div - 类似于搜索结果页面 - 并且需要将 .click() 绑定(bind)到每个动态生成的 div 中的元素。我有一个 php 文件,它执行 html 生成工作并将所有 html 作为字符串返回,但是我无法绑定(bind) jquery .click(),因为包含 jquery 函数的脚本标记被删除。

这是通过调用php文件加载外部内容的代码...

$("#titles_wrap").load("m_scripts/m_php/titles_loader.php", function(){
                                                                $..some code
                                                                });

这是生成 div 的 php 文件中的循环(效果很好)...

$tag1='<script type="text/javascript">';
$tag2='</script>';

while($result_array = mysql_fetch_array($result)) {

            if($i2<=($titles_total)){

                $_SESSION['titles_string'] .= '<li id="listItem_'.$i2.'">

                                                <div id="titles_list_item">

                                                    <div id="titles_list_image_box" style="background-image: url(../../images/thumbs_test/'.$result_array[0].'); background-repeat: no-repeat; ">'.($i2+1).'</div>
                                                    <div id="title_php_loader"></div>
                                                        <div id="title_info_wrap">

                                                        <div id="title_current"><span class="title_current_grey" >current title: </span><br>'.$result_array[1].'
                                                            </div>

                                                                <div id="title_form_wrap">
                                                                    <span class="title_current_grey" >new title: </span><br><input name="title_input_'.$i2.'" id="title_input_'.$i2.'" type="text" class="title_input"></input>
                                                                    <div id="title_send" class="title_send_'.$i2.'">GO</div>
                                                                </div>

                                                            </div>


                                                    '.$tag1.'
                                                    $(".title_send_'.$i2.'").click(function(){$("#title_php_loader").load("m_scripts/m_php/title_sender.php")})
                                                    '.$tag2.'

                                                </div>
                                            </li>';
                $i2++;
                                }
            }

抱歉,如果第二个代码块有点“过度”,请告诉我简化的摘录是否会更有用。也就是说,您可以在 php 代码最后一行的第 8 行看到 jquery 函数,该函数应该使用动态分配的选择器写入每个 div 中。

当然,代码中可能还有其他错误,但是我无法测试它,直到我可以让 .load() 停止破坏它!

如果有人找到了解决这个问题的方法 - 或者甚至是有限恩典的解决方法 - 太棒了!

提前致谢,

干杯,

斯科特

编辑-编辑-编辑-编辑-编辑-编辑-编辑-编辑

@T.J.克劳德 @Frug

感谢您的帮助!

我刚刚仔细查看了您的演示中涉及的页面,是的,我看到您已经可以正常工作了。看起来很神奇,因为它们就在那里 - 那些脚本标签,而且有很多人无法让它工作 - 不幸的是我就是其中之一!

我发现您的演示和我的代码情况之间的唯一区别是

1)开始脚本标记中没有类型声明,

2) 你正在加载一个带有脚本标签作为 DOM 一部分的页面,而我正在加载 php 字符串输出(我真的不认为这很重要,是吗?当它到达客户端时,一切都发生了都是同样的事情,不是吗?)

3),您的 .load 调用正在获取整个页面,而我的仅返回元素。我已经更改了输出字符串以包含所有 , 和 标签,但是 grrrrrrr...我仍然无法让该死的脚本标签显示在 DOM 中。

有什么建议吗?有些负载我不知道,所以可能是任何东西!谢谢S

最佳答案

立即更新,您可以在 jQuery 文档网站上找到它:

http://api.jquery.com/load/

仅当您使用特定后缀选择器调用加载时,它才会删除标签..

脚本执行

当使用不带后缀选择器表达式的 URL 调用 .load() 时,内容会在删除脚本之前传递给 .html()。这会在脚本 block 被丢弃之前执行它们。但是,如果使用附加到 URL 的选择器表达式来调用 .load(),则脚本会在更新 DOM 之前被删除,因此不会执行。这两种情况的示例如下:

在这里,任何作为文档一部分加载到 #a 中的 JavaScript 都将成功执行。 1

$('#a').load('article.html');

但是,在以下情况下,加载到 #b 中的文档中的脚本 block 将被删除并且不会执行: 1

$('#b').load('article.html #target');

关于jquery load() 去除脚本标签 - 解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036870/

相关文章:

jquery - jQuery 如何加载一些 html 并将其附加到 <body> 元素中?

tags - "gssd"或 "gsst"等 MP4 元数据标签是什么意思?

python - Django -- 如何使用带有多个参数的 templatetags 过滤器

JavaScript - 检查加载了什么页面?

Android 多 WebViews 问题 : Not being able to load the first one until the rest have loaded

git - SVN 到 Git 分支/标签/主干

JQuery:如何在具有特定类的所有范围内进行迭代

javascript - 语义 UI 弹出窗口未打开

jquery - d3.json、d3.xhr和跨域问题

jquery - 我需要使用 jQuery 将一个 div 替换为另一个 div