我需要用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); });
必须有一个简单的方法。
编辑:我累了,没有思考。您可以使用本机innerHTML方法来代替.html():
innerHTML
.html()
$('#feedback-' + idfeedback)[0].innerHTML = x;
原始答案:
我的直觉是,您链接的答案对您不起作用,因为所包含的脚本是使用src属性而不是<script>and </script>标记之间的脚本内容来调用的。这可能起作用:
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()); } });
请注意,此产品尚未经过任何测试,可能会吞噬婴儿。