1

ここにJavascriptnewb。作業中の簡単なタスクを自動化するためのブックマークレットを作成します。主に学習演習。たとえば、CNN.comのトランスクリプトをスキャンします:(http://transcripts.cnn.com/TRANSCRIPTS/1302/28/acd.01.html)。ページ上部のリードストーリー、ショーのゲストの名前とタイトルを取得し、別のドキュメントにコピーして貼り付けることができるようにフォーマットします。

小見出しを取得し、正規表現を使用してゲストの名前を検索するjQueryを含む単純なバージョンを考え出しました((ビデオクリップの開始)と(ビデオクリップの終了)の間のすべても除外されますが、私は持っていませんまだそこまで到達していません。アラートが表示されます(最終的にはポップアップウィンドウに出力されます。アラートはトラブルシューティングのみを目的としています)。

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);

htmlマークアップを削除しますがinnerText、それは完璧にはほど遠いものであり、そこにポップアップするものは、ページの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 に答える