2013-03-06 44 views
1

Javascript newb here。創建一個書籤,以便在工作中自動執行一項簡單的任務。主要是一個學習練習。它將掃描CNN.com上的抄本,例如:(http://transcripts.cnn.com/TRANSCRIPTS/1302/28/acd.01.html)。它將抓取頁面頂部的主要故事,表演中客人的姓名和標題,並對其進行格式化,以便將它們複製粘貼到另一個文檔中。Javascript小書籤無響應

我想出了一個簡單的版本,其中包含一些抓取子標題的jQuery,然後使用正則表達式來查找客人的名稱(它也將排除(開始videoclip)和(end videoclip)之間的所有內容,但我還沒有得到那麼遠呢。然後,它提醒他們(最終將打印他們在一個彈出窗口,警報只是爲了排除故障)。

我使用http://benalman.com/code/test/jquery-run-code-bookmarklet/創建的書籤。我問題是,一旦書籤創建完全沒有響應,點擊它並沒有任何反應,我試着最小化代碼,沒有結果。我的猜測是cnn.com的javascript與我的衝突,但我不確定如何解決這個問題,或者我需要包含一些代碼廣告並將文本存儲在當前頁面上?這裏是代碼(我已經包含了評論,但是當我使用bookmarklet生成器時,我拿出了這些代碼。)感謝您的幫助!

//Grabs the subheading 
var leadStories=$(".cnnTransSubHead").text(); 
//Scans the webpage for guest name and title. Includes a regular expression to find any 
//string that starts with a capital letter, includes a comma, and ends in a colon. 
var scanForGuests=/[A-Z ].+,[A-Z0-9 ].+:/g; 
//Joins the array created by scanForGuests with a semicolon instead of a comma 
var guests=scanForGuests.join(‘; ‘); 
//Creates an alert in the proper format including stories and guests. 
alert(「Lead Stories: 「 + leadStories + 「. 」 + guests + 「. SEE TRANSCRIPT FIELD FOR FULL TRANSCRIPT.「) 
+0

確保使用'VAR scanForGuests'如果您忘記了是怎麼回事全局命名空間的'var'關鍵字和可能(儘管在這種情況下,不太可能)發生衝突。 – 2013-03-06 20:28:26

+0

對不起,這是一個複製粘貼錯誤。改變它並獲得相同的結果。 – babyjordan 2013-03-06 20:32:34

+0

我也不確定你正在使用的那些引用。一個是'''另一個是''' - 這些實際上是不同的字符 – 2013-03-06 20:57:43

回答

0

轉到頁面。打開開發人員工具(chrome中的ctrl + shift + j)並將代碼粘貼到控制檯中,以查看出了什麼問題。


var leadStories = $(".cnnTransSubHead").text();$是從jQuery和提供的鏈接不具有的jQuery加載到頁面。

在任何現代的瀏覽器,你應該能夠達到相同的結果,而jQuery的:

var leadStories = document.getElementsByClassName('cnnTransSubHead') 
    .map(function(el) { return el.innerText }); 

接下來我們:

var scanForGuests=/[A-Z ].+,[A-Z0-9 ].+:/g; 
var guests=scanForGuests.join('; '); 

scanForGuests是正則表達式,你實際上從未匹配任何東西 - 所以.join()會引發錯誤。我不確定你想要做什麼。你是否想掃描該正則表達式的頁面全文?在這種情況下,這樣的事情將是你最好的選擇

document.body.innerText.match(scanForGuests); 

記住,雖然innerText刪除HTML標記,它完美的遠,什麼在它彈出的頁面的HTML是如何擺佈非常多結構化的。這就是說,在我的快速測試中,它似乎工作。

最後,對於這樣的事情,您應該使用immediately invoked function或者您將所有變量粘貼到全局上下文中。

所以把他們放在一起,你得到的東西是這樣的:

(function() { 
    var leadStories = document.getElementsByClassName('cnnTransSubHead') 
     .map(function(el) { return el.innerText }); 
    var scanForGuests=/[A-Z ].+,[A-Z0-9 ].+:/g; 
    var guests = document.body.innerText.match(scanForGuests).join("; "); 
    alert("Leads: " + leadStories + " Guests: " + guests); 
})(); 
+0

完美的作品。非常有幫助。尤其是控制檯提示...我在JSbin中測試,但後來不知道如何將它鏈接到網站。謝謝! – babyjordan 2013-03-06 22:23:05

+0

是,沒問題。記得標記爲答案,如果它有幫助 – 2013-03-06 22:26:42