jquery html()删除脚本标记

brp*_*paz 27 html tags ajax jquery

我需要用ajax调用的html结果替换页面中div的内容.问题是html中有一些必要的脚本,似乎jquery html()函数将它们删除,我需要过滤响应并只得到一个特定的div.

我正在考虑一个解决方法,即从ajax响应中提取所有脚本标记,然后将它们附加到DOM中,但我无法做到这一点.

这是我的代码;

   $('a.link-vote').live('click',function(){
        var idfeedback = $(this).attr('id').split('-')[1];
        var href = $(this).attr('href');
        $('.feedback-' + idfeedback + '-loader').show();
        $.ajax({
            type: "POST",
            url: href,
            success: function(response){
               var x = $(response).find('#feedback-'+ idfeedback).html();
               $('.feedback-' + idfeedback + '-loader').hide();
               $('#feedback-'+ idfeedback).html(x);

            }
        });
        return false;
    });
Run Code Online (Sandbox Code Playgroud)

我发现了这个老话题: jQuery - HTML中的脚本标记由jQuery解析而不执行

但是有任何结论.我尝试了那里建议的解决方案,但没有一个工作.

编辑:我似乎找到了一个基于旧主题的解决方法,但它并不漂亮;

  var dom = $(response);
                // var x = $(response).find('#feedback-'+ idfeedback).html();
                $('.feedback-' + idfeedback + '-loader').hide();
                //$('#feedback-'+ idfeedback).html(x);

                $('#feedback-'+ idfeedback).html(dom.find('#feedback-'+ idfeedback).html());

                dom.filter('script').each(function(){
                    var obj = $(this);
                    $('#feedback-'+ idfeedback + ' .feedback-comments').append(obj);
                });
Run Code Online (Sandbox Code Playgroud)

必须有一个简单的方法.

eye*_*ess 27

编辑:我累了,不思考.您可以使用本机innerHTML方法而不是.html():

$('#feedback-' + idfeedback)[0].innerHTML = x;
Run Code Online (Sandbox Code Playgroud)

原始答案:

我的预感是你链接的答案不适合你,因为包含的脚本是使用src属性调用的,而不是<script></script>标签之间的脚本内容.这可能有效:

$.ajax({
    url: 'example.html',
    type: 'GET',
    success: function(data) {

        var dom = $(data);

        dom.filter('script').each(function(){
            if(this.src) {
                var script = document.createElement('script'), i, attrName, attrValue, attrs = this.attributes;
                for(i = 0; i < attrs.length; i++) {
                    attrName = attrs[i].name;
                    attrValue = attrs[i].value;
                    script[attrName] = attrValue;
                }
                document.body.appendChild(script);
            } else {
                $.globalEval(this.text || this.textContent || this.innerHTML || '');
            }
        });

        $('#mydiv').html(dom.find('#something').html());

    }
});
Run Code Online (Sandbox Code Playgroud)

请注意,这还没有经过任何测试,可能会吃婴儿.

  • 吃婴儿,哈哈哈! (14认同)