2013-10-09 40 views
2

我拉一個AJAX響應HTML字符串使用jQuery。當我將這個響應附加到文檔時,我有一些碰撞腳本,所以我想刪除它,並且只有在刪除了有問題的原始腳本後才放置它。jQuery的查找腳本標記在AJAX響應字符串

這裏是我的代碼(位於阿賈克斯成功功能):

var content = $(response).find('.content').html(); 
var scripts = $(content).find('script'); 
console.log(scripts); 

此代碼返回0腳本。但是,當我這樣做時:

var content = $(response).find('.content').html(); 
var scripts = $(content).find('h3'); //PULLING H3s INSTEAD OF SCRIPT TAGS 
console.log(scripts); 

它返回該字符串中的所有h3's。這裏發生了什麼?

我可以證實,該劇本在響應字符串。

感謝所有幫助。我最終在文檔中使用隱藏的輸入,然後在這些值上使用$ .getScript()。一切都在工作,現在。

+3

腳本標籤被剝離,當你做'$(響應)'執行。相反,您應該使用正則表達式將div標籤替換爲腳本標籤,然後在將其轉換爲DOM節點後,選擇所述div,迭代它們並處理它們。或者,不要在html中包含腳本標記,而是使用javascript請求。這就是我要做的事情,它遠沒有那麼容易出錯。 –

+0

我不想在HTML中包含腳本,但它適用於想要幻燈片樣式網站的客戶端,其中網頁使用AJAX加載。很多這些頁面都有腳本。我不確定正確的做法。 – Shane

回答

1

腳本標籤被剝離並執行,當你做$(響應)。相反,你應該使用正規與div的更換腳本標記,你把它變成DOM節點在此之後,選擇所述的div,在它們之間迭代,並對其進行處理。這樣做的

一種方法是:

function cleanInsert(html, target, htmlSelector, filter) { 
    var outHTML = html, $content = $(target); 
    outHTML = outHTML.replace(/<script/ig, "<div class='iscript'").replace(/<\/script/ig, '</script'); 
    outHTML = $("<div>").html(outHTML); 
    outHTML = htmlSelector ? outHTML.find(htmlSelector) : outHTML.children(); 
    if (filter) { 
     outHTML = filter.call(outHTML); 
    } 
    var scripts = outHTML.filter('div.iscript').detach(); 
    scripts.add(outHTML.find('div.iscript').detatch()); 
    $content.html(outHTML); 
    scripts.each(function() { 
     var $this = $(this), 
      s = document.createElement("script"); 
     if ($this.attr('src') != "") { 
      s.src = $this.attr('src'); 
     } else { 
      s.nodeValue = $this.text(); 
     } 
     $content[0].appendChild(s); 
    }); 
}​ 
//     insert target response filter 
cleanInsert(response, "#targetel", ".content"); 

不頻繁的測試。

相關問題