一尘不染

jQuery html()剥离脚本标签

ajax

我需要用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;
    });

但这是任何结论。我尝试了那里提出的解决方案,但没有一个起作用。

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

  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);
                });

必须有一个简单的方法。


阅读 379

收藏
2020-07-26

共1个答案

一尘不染

编辑:我累了,没有思考。您可以使用本机innerHTML方法来代替.html()

$('#feedback-' + idfeedback)[0].innerHTML = x;

原始答案:

我的直觉是,您链接的答案对您不起作用,因为所包含的脚本是使用src属性而不是<script>and
</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());

        }
    });

请注意,此产品尚未经过任何测试,可能会吞噬婴儿。

2020-07-26