2013-03-06 2 views
1

Javascript newb здесь. Создание букмарклета для автоматизации простой задачи при работе. В основном учебное упражнение. Он сканирует транскрипт на CNN.com, например: (http://transcripts.cnn.com/TRANSCRIPTS/1302/28/acd.01.html). Он будет захватывать ведущие истории в верхней части страницы, имя и название гостей на шоу и отформатировать их, чтобы их можно было скопировать в другой документ.Javascript Bookmarklet Unresponsive

Я придумал простую версию, которая включает в себя некоторый jQuery, который захватывает подзаголовок, а затем использует регулярное выражение, чтобы найти имена гостей (он также исключает все (начало видеоролика) и (конец видеоролика) , но я до сих пор не получил этого, а затем оповещает их (в конечном итоге распечатает их во всплывающем окне, предупреждение предназначено только для устранения неполадок).

Я использую http://benalman.com/code/test/jquery-run-code-bookmarklet/, чтобы создать букмарклет. проблема заключается в том, что после создания букмарклета он полностью не отвечает. Нажмите на него, и ничего не происходит. Я попытался свести к минимуму код сначала без результата. Я предполагаю, что javascript cnn.com конфликтует с моим, но я не уверен как обойти это. Или мне нужно включить некоторый код в lo объявление и сохранить текст на текущей странице? Вот код (я включил комментарии, но я взял их, когда использовал генератор букмарклетов.) Спасибо за любую помощь!

//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

убедитесь, что использовать 'вар scanForGuests' если вы забыли' var' ключевое слово это происходит глобальное пространство имен и может (хотя и в этом случае маловероятно) к конфликту. –

+0

К сожалению, это была ошибка копирования. Изменил его и получил тот же результат. – babyjordan

+0

Я также не уверен в этих цитатах, которые вы используете. one is '' 'another is' '' - на самом деле это разные символы. –

ответ

0

Перейти на страницу. Откройте инструменты разработчика (ctrl + shift + j в chrome) и вставьте свой код в консоль, чтобы узнать, что не так.


$ в 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

+0

yup, проблем нет. не забудьте отметить как ответ, если это поможет –