2012-02-20 116 views
2

我需要從任意網頁中提取文本(只有純文本)(我在服務器上繞過了一個簡單的php代理的跨域問題)。 我做,像往常一樣,jQuery:如何從頁面獲取文本?

$.get(url, function(data) { 
    process(data); 
}); 

,並在我的過程()函數我有網頁的內容。 我想在該頁面中考慮一個特定的div(這裏是'#my-div'),或者如果不存在 - 作爲後備 - 整個主體。

我願做這樣的事情:

function process(content) { 
    if ($(content).find('#my-div')) 
    $('#output').text($(content).find('#my-div').text()); 
    else 
    $('#output').text($(content).find('body').text()); 
} 

但我總賭注得到一個空的結果時,「發現」「體」:什麼建議嗎?

+0

如果要打印的內容的整個變量裏面是什麼東西?它有身體標籤嗎? – 2012-02-20 16:22:42

+0

我以前遇到過這個問題。在我的情況下,響應('內容')沒有正確的xml格式;檢查錯誤控制檯(螢火蟲/火狐)... – mshsayem 2012-02-20 16:24:22

+0

整個變量包含頁面的全身,包括html標記,我想忽略... – MarcoS 2012-02-20 16:25:53

回答

3

有些問題......

function process(content) { 
    // The if() will always be true, because a jQuery object is always retruend 
    if ($(content).find('#my-div')) 
    $('#output') = $(content).find('#my-div').text(); // invalid assignment 
    else 
    $('#output') = $(content).find('body').text();  // invalid assignment 
} 

固定...

function process(content) { 
    var nodes = $(content); // cache the elements 
    if (nodes.find('#my-div').length) 
    $('#output').text(nodes.find('#my-div').text()); 
    else 
    $('#output').text(nodes.find('body').text());  
} 

現在理論上它似乎工作,但也有通過整個HTML文檔問題到$函數。你會發現一些瀏覽器去掉了一些元素,如<head><body>

你最終需要測試每一種情況下,這樣的事情...

function process(content) { 
    var nodes = $(content); // cache the elements 
    var my_div = nodes.find('#my-div'); // try to get nested #my-div 

    if(!my_div.length) { 
     my_div = nodes.filter('#my-div'); // try to get #my-div at top level 

     if(!my_div.length) { 
      my_div = nodes.find('body') // try to get nested body 

      if(!my_div.length) { 
       my_div = nodes; // assume the body content is at the top level 
      } 
     } 
    } 
    $('#output').text(my_div.text()); 
} 
+0

我正要指出你在最後一段中說了些什麼。我認爲一個解決方案就是簡單地做:'content.text()' – powerbuoy 2012-02-20 16:26:56

+0

@powerbuoy:這可能有效。我想出了一個更長的解決方案,它仍在測試'#my-div'元素。我認爲*它涵蓋了所有瀏覽器。 – 2012-02-20 16:29:41

+0

謝謝。我對你的答案的第二行非常感興趣:var content = $(content); //緩存元素 對不起,我不完全理解這一行;以及 - 如何將它用於緩存元素? – MarcoS 2012-02-20 16:32:20

0

您需要設置文本屬性

$('#output').text($(content).find('#my-div').text()); 
else 
    $('#output').text($(content).find('body').text()); 
3

使用

if ($(content).find('#my-div').length) 

以查看是否有元素存在。