2017-07-30 24 views
1

我已經檢查過Google,並且知道如何通過AJAX使用jQuery獲取文件的一部分,但是我無法找到任何有關如何使用普通JS進行操作的說明。如何僅通過Javascript AJAX請求獲取文件的一部分(沒有jQuery)

我曾嘗試:

xhr.open('GET', 'https://website.html .my-class'); 

不行的,lookign由ID的元素也不能工作。

這將返回整個文件。

我還沒有嘗試緩存和碎片整個返回的文件,我懷疑這將無論如何工作。

那麼,這是如何完成的?當然有可能,對吧?

+0

jQuery的獲得了整個FIL e併爲您提取選定的元素。所以看看如何做到這一點。 – Musa

+0

實際上,jquery解析整個檢索到的文檔,並僅給出您提及的特定部分。這裏是jquery的load方法的引用:'當此方法執行時,它檢索ajax/test.html的內容,但jQuery分析返回的文檔找到具有容器ID的元素:http://api.jquery.com/load/ – Ramanlfc

+0

嗯,是的,這很酷,但是這是怎麼做到的JS,任何想法,在jQuery源代碼這是什麼? – ptts

回答

2

您可以使用DOMParser()XMLHttpRequest.responseText創建HTML document,然後用document.querySelector()document.querySelectorAll()document檢索具體的選擇

var file = `data:text/html, 
 
      <!DOCTYPE html> 
 
      <html> 
 
       <body> 
 
       <div class="my-class">my class</div> 
 
       </body> 
 
      </html>`; 
 

 
var request = new XMLHttpRequest(); 
 
request.open("GET", file, true); 
 
request.onload = function() { 
 
    var html = request.responseText; 
 
    var parser = new DOMParser(); 
 
    var doc = parser.parseFromString(html, "text/html"); 
 
    var el = doc.querySelector(".my-class"); 
 
    document.body.appendChild(el); 
 
} 
 
request.send();

+0

我們不要談論它是錯誤的還是正確的解析HTML正則表達式,這在大多數情況下是錯誤的。新的DOMParser();'會比正則表達式更快嗎? ;) –

+0

@IliaRostovtsev _「我們不要談論是否錯誤或正確解析HTML與正則表達式,它在大多數情況下是錯誤的。'新的DOMParser();'比正則表達式更快;)」_這應該是一個問題到自己身上。可以測量比較的實際時間以提供準確的結果,而無需猜測。 – guest271314