我需要替换我的页面中的div的内容与ajax调用的html结果。
问题是,html有一些必要的脚本,它似乎jquery 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; });
我发现这个老主题:
http://www.jb51.cc/article/p-hybnjvib-bss.html
但是任何结论。我试过建议的解决方案,但没有一个工作。
编辑:
我似乎找到了一个解决方案,基于那个老主题,但它不漂亮;
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():
$('#Feedback-' + idFeedback)[0].innerHTML = x;
原始答案:
我的预感是,你链接的答案不适合你,因为包括的脚本调用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()); } });
注意,这没有进行任何测试,可能会吃婴儿。