有人知道 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 文档网站上找到它:
仅当您使用特定后缀选择器调用加载时,它才会删除标签..
脚本执行
当使用不带后缀选择器表达式的 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/