2013-10-09 19 views
2

我拉一个AJAX响应HTML字符串使用jQuery。当我将这个响应附加到文档时,我有一些碰撞脚本,所以我想删除它,并且只有在删除了有问题的原始脚本后才放置它。jQuery的查找脚本标记在AJAX响应字符串

这里是我的代码(位于阿贾克斯成功功能):

var content = $(response).find('.content').html(); 
var scripts = $(content).find('script'); 
console.log(scripts); 

此代码返回0脚本。但是,当我这样做时:

var content = $(response).find('.content').html(); 
var scripts = $(content).find('h3'); //PULLING H3s INSTEAD OF SCRIPT TAGS 
console.log(scripts); 

它返回该字符串中的所有h3's。这里发生了什么?

我可以证实,该剧本在响应字符串。

感谢所有帮助。我最终在文档中使用隐藏的输入,然后在这些值上使用$ .getScript()。一切都在工作,现在。

+3

脚本标签被剥离,当你做'$(响应)'执行。相反,您应该使用正则表达式将div标签替换为脚本标签,然后在将其转换为DOM节点后,选择所述div,迭代它们并处理它们。或者,不要在html中包含脚本标记,而是使用javascript请求。这就是我要做的事情,它远没有那么容易出错。 –

+0

我不想在HTML中包含脚本,但它适用于想要幻灯片样式网站的客户端,其中网页使用AJAX加载。很多这些页面都有脚本。我不确定正确的做法。 – Shane

回答

1

脚本标签被剥离并执行,当你做$(响应)。相反,你应该使用正规与div的更换脚本标记,你把它变成DOM节点在此之后,选择所述的div,在它们之间迭代,并对其进行处理。这样做的

一种方法是:

function cleanInsert(html, target, htmlSelector, filter) { 
    var outHTML = html, $content = $(target); 
    outHTML = outHTML.replace(/<script/ig, "<div class='iscript'").replace(/<\/script/ig, '</script'); 
    outHTML = $("<div>").html(outHTML); 
    outHTML = htmlSelector ? outHTML.find(htmlSelector) : outHTML.children(); 
    if (filter) { 
     outHTML = filter.call(outHTML); 
    } 
    var scripts = outHTML.filter('div.iscript').detach(); 
    scripts.add(outHTML.find('div.iscript').detatch()); 
    $content.html(outHTML); 
    scripts.each(function() { 
     var $this = $(this), 
      s = document.createElement("script"); 
     if ($this.attr('src') != "") { 
      s.src = $this.attr('src'); 
     } else { 
      s.nodeValue = $this.text(); 
     } 
     $content[0].appendChild(s); 
    }); 
}​ 
//     insert target response filter 
cleanInsert(response, "#targetel", ".content"); 

不频繁的测试。

相关问题