我需要替换我的页面中的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():
原始答案:
我的预感是,你链接的答案不适合你,因为包括的脚本调用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());
- }
- });
注意,这没有进行任何测试,可能会吃婴儿。