Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在插入到页外dom时保留脚本标记,然后使用jquery插入到页面_Javascript_Jquery_Ajax_Dom - Fatal编程技术网

Javascript 在插入到页外dom时保留脚本标记,然后使用jquery插入到页面

Javascript 在插入到页外dom时保留脚本标记,然后使用jquery插入到页面,javascript,jquery,ajax,dom,Javascript,Jquery,Ajax,Dom,我正在构建一个无限滚动例程,用于缓存要添加到页面外的行 我$。获取行并将它们添加到$(“”),然后每当我需要新行时,我都会从该dom向页面添加一行 我已经读到,当添加到dom时,jquery将去掉脚本标记,然后执行javascript 这似乎给我带来了一个问题,因为当jquery运行脚本时,元素在非页面dom中,而不是在主页dom中 如何保留脚本,以便在向页面添加页外元素时执行脚本? 我在中添加了警报,javascript似乎根本就不会执行,无论是在添加到离页dom还是实际的页面dom时,所以在

我正在构建一个无限滚动例程,用于缓存要添加到页面外的行

$。获取
行并将它们添加到
$(“”)
,然后每当我需要新行时,我都会从该dom向页面添加一行

我已经读到,当添加到dom时,jquery将去掉脚本标记,然后执行javascript

这似乎给我带来了一个问题,因为当jquery运行脚本时,元素在非页面dom中,而不是在主页dom中

如何保留脚本,以便在向页面添加页外元素时执行脚本?

我在中添加了警报,javascript似乎根本就不会执行,无论是在添加到离页dom还是实际的页面dom时,所以在这成为问题之前,我可能失败了


获取新行并将其放置在离页dom中的代码:

var nextPageDOM = $('<div/>');
var jqxhr = $.get(data.nextPageURL, function(nextPageHTML) {
    nextPageDOM.html($(nextPageHTML).find(data.settings.pagedContent));

    // Get the elements to add to the page
    data.nextPageElements = nextPageDOM.find(data.settings.rowSelector);
}

不知道许多变量指向何处是很难解决的问题,因此,如果我们假设data.settings.pagedContent指向页面上的DOM,为什么只查找与ajax响应中已有元素相同的元素呢? 另一方面,如果data.settings.pagedContent是一个选择器,我想知道脚本是否超出了选择器。如果您提供一个ajaxresponse示例,将非常有用

无论如何,如果您正在寻找一种避免jQuery脚本剥离的方法,那么可以执行以下操作: 创建辅助div容器

var $cont = $("<div/>");
然后从$cont中选择脚本并保存它们

$scripts = $cont.find("script");
现在您已经提取了脚本,您可以继续以与之前相同的方式进行缓存,但要分别处理html和脚本,并且在您希望在页面DOM中检索一些html时,您还可以将脚本附加到DOM中

希望能有所帮助,很抱歉在这里要求澄清,而不是在评论中,但我没有足够的声誉

编辑(2013-01-22)

jQuery核心功能中关于处理脚本标记解析的新闻,在jQuery 2.0测试版上实现(jQuery 1.9将是延续旧行为的最后一个版本) 从

在HTML内容中加载和运行脚本

1.9之前的任何HTML接受方法(例如,$(),.append()或 .wrap()执行HTML中的所有脚本,并将它们从 记录以防止再次执行。这个还是坏了 在脚本可能被删除并重新插入到 使用.wrap()等方法编写文档。从1.9开始,已插入脚本 在文档中执行,但留在文档中并标记为 已执行,因此即使已执行,也不会再次执行 移除并重新插入

尽管有这种变化,但混合可执行文件是非常糟糕的做法 将JavaScript转换为HTML标记;它具有设计性、安全性、可靠性和可靠性 性能影响。例如,包含外部脚本标记 在HTML中,数据是同步获取的,然后进行计算,这可能需要 大量的时间。没有要在何时或何时通知的接口 是否加载这些脚本,或在出现错误时采取纠正措施 这是一个错误

试图通过克隆现有脚本标记加载脚本的代码 将克隆注入文档将不再有效, 因为克隆的脚本标记已标记为已执行。到 加载新脚本时,请改用jQuery.getScript()


不知道许多变量指向何处是很难解决的问题,因此,如果我们假设data.settings.pagedContent指向页面上的DOM,为什么只查找与ajax响应中已有元素相同的元素呢? 另一方面,如果data.settings.pagedContent是一个选择器,我想知道脚本是否超出了选择器。如果您提供一个ajaxresponse示例,将非常有用

无论如何,如果您正在寻找一种避免jQuery脚本剥离的方法,那么可以执行以下操作: 创建辅助div容器

var $cont = $("<div/>");
然后从$cont中选择脚本并保存它们

$scripts = $cont.find("script");
现在您已经提取了脚本,您可以继续以与之前相同的方式进行缓存,但要分别处理html和脚本,并且在您希望在页面DOM中检索一些html时,您还可以将脚本附加到DOM中

希望能有所帮助,很抱歉在这里要求澄清,而不是在评论中,但我没有足够的声誉

编辑(2013-01-22)

jQuery核心功能中关于处理脚本标记解析的新闻,在jQuery 2.0测试版上实现(jQuery 1.9将是延续旧行为的最后一个版本) 从

在HTML内容中加载和运行脚本

1.9之前的任何HTML接受方法(例如,$(),.append()或 .wrap()执行HTML中的所有脚本,并将它们从 记录以防止再次执行。这个还是坏了 在脚本可能被删除并重新插入到 使用.wrap()等方法编写文档。从1.9开始,已插入脚本 在文档中执行,但留在文档中并标记为 已执行,因此即使已执行,也不会再次执行 移除并重新插入

尽管有这种变化,但混合可执行文件是非常糟糕的做法 将JavaScript转换为HTML标记;它具有设计性、安全性、可靠性和可靠性 性能影响。例如,包含外部脚本标记 在HTML中,数据是同步获取的,然后进行计算,这可能需要 大量的时间。没有要在何时或何时通知的接口 是否加载这些脚本,或在出现错误时采取纠正措施 这是一个错误

试图通过克隆现有脚本标记加载脚本的代码 将克隆注入文档将不再有效, 因为克隆人
var nextPageDOM = $('<div/>');
var jqxhr = $.get(data.nextPageURL, function(nextPageHTML) {
    nextPageHTML =  stripScripts(nextPageHTML );  // remove the script tag ;)
    nextPageDOM.html($(nextPageHTML).find(data.settings.pagedContent));

    // Get the elements to add to the page
    data.nextPageElements = nextPageDOM.find(data.settings.rowSelector);
}
function getScripts(text) {
       var SCRIPT_REGEX = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
         text = text.match(SCRIPT_REGEX);
        return test;   // you can use eval to execute the script or you can crete a script tag and insert the script in the tag and it will get executed
      }
`<scr<script>Ha!</script>ipt> alert(document.cookie);</script>`
   function stripScripts(text) {
       var SCRIPT_REGEX = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
       while (SCRIPT_REGEX.test(text)) {
         text = text.replace(SCRIPT_REGEX, "");
        }
      return test
      }
$.ajax({url:data.nextPageURL, datatype:script, data:relevant_data_map,});
alert('this is running');                        // or whatever
var nextPageDOM = $('<div/>');
nextPageDOM.html('this is from the server');     // or whatever
$(nextPageDOM).insertBefore("#end_of_content_mark");