jQuery在AJAX响应字符串中查找脚本标记

时间:2013-10-09 19:08:14

标签: javascript jquery

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

这是我的代码(位于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。这是怎么回事?

我可以确认脚本是否在响应字符串中。

感谢大家的帮助。我最终在文档中使用了隐藏的输入,然后对它们的值使用$ .getScript()。现在一切正常。

1 个答案:

答案 0 :(得分:2)

当你执行$(响应)时,脚本标记被剥离并执行。相反,您应该使用正则表达式将脚本标记替换为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");

未经过严格测试。