1

Javascript新手在这里。创建一个小书签来自动化工作中的简单任务。主要是学习练习。它将扫描 CNN.com 上的成绩单,例如:( http://transcripts.cnn.com/TRANSCRIPTS/1302/28/acd.01.html )。它将抓取页面顶部的主要故事、节目嘉宾的姓名和头衔,并对其进行格式化,以便可以将它们复制粘贴到另一个文档中。

我想出了一个简单的版本,其中包括一些 jQuery,它可以抓取副标题,然后使用正则表达式来查找客人的姓名(它还将排除 (begin videoclip) 和 (end videoclip) 之间的所有内容,但我没有还没有走那么远。然后它会提醒他们(最终会在弹出窗口中打印它们,警报只是用于故障排除目的)。

我正在使用http://benalman.com/code/test/jquery-run-code-bookmarklet/创建书签。我的问题是,一旦创建了小书签,它就完全没有响应。单击它,没有任何反应。我试过先最小化代码,但没有结果。我的猜测是 cnn.com 的 javascript 与我的冲突,但我不知道如何解决这个问题。还是我需要包含一些代码来加载和存储当前页面上的文本?这是代码(我已经包含了注释,但是当我使用书签生成器时,我把它们去掉了。)感谢您的帮助!

//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.“)   
4

1 回答 1

0

转到页面。打开开发人员工具(chrome 中的 ctrl+shift+j)并将代码粘贴到控制台中以查看问题所在。


$in来自 jQuery,并且提供的var leadStories = $(".cnnTransSubHead").text();链接没有将 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 结构。也就是说,在我的快速测试中,它似乎有效。

最后,对于这样的事情,您应该使用立即调用的函数,或者将所有变量粘贴到全局上下文中。

所以把它们放在一起你会得到这样的东西:

(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);
})();
于 2013-03-06T22:04:07.723 回答