2013-03-06 3 views
1

자바 스크립트 newb 여기에 있습니다. 직장에서 간단한 작업을 자동화하는 북마크릿 만들기. 주로 학습 운동. CNN.com의 성적표 (예 : (http://transcripts.cnn.com/TRANSCRIPTS/1302/28/acd.01.html))를 스캔합니다. 페이지 상단의 주요 기사, 쇼의 게스트 이름 및 제목을 가져 와서 다른 문서에 붙여 넣을 수 있도록 서식을 지정합니다.자바 스크립트 북마크 함 응답 없음

나는 하위 제목을 붙잡고 정규 표현식을 사용하여 게스트의 이름을 찾는 jQuery를 포함하는 간단한 버전을 만들었습니다 (또한 (begin videoclip)와 (videoclip 시작) 사이의 모든 것을 제외합니다) 하지만 아직까지는 알려주지 못했습니다. (경고창은 문제 해결을 위해 팝업 창에 표시됩니다.)

북마크릿을 만들 때 http://benalman.com/code/test/jquery-run-code-bookmarklet/을 사용하고 있습니다. 문제는 북마크릿이 만들어지면 완전히 반응이 없다는 것입니다. 클릭하여 아무 일도 일어나지 않습니다. 결과가없는 코드를 최소화하려고 시도했습니다. 내 생각에 cnn.com의 자바 스크립트가 내 것과 충돌하지만 확실하지 않습니다. 그것을 해결하는 방법 또는 코드를 포함시켜야합니까? 광고하고 현재 페이지에 텍스트를 저장 하시겠습니까? 다음은 코드입니다 (주석을 포함 시켰습니다. 그러나 북마크 생성기를 사용했을 때이 코드를 사용했습니다.) 도움을 주셔서 감사합니다!

//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' 키워드를 잊어 버린 경우 var에 scanForGuests''사용할 수 있는지 확인하고 수도 (비록 :

그래서 당신이 뭔가를 얻을 모두 함께 넣어) 충돌 할 가능성은 거의 없습니다. –

+0

복사본 붙여 넣기 오류가 발생했습니다. 그것을 바꿔서 같은 결과를 얻었습니다. – babyjordan

+0

나는 또한 당신이 사용하는 인용문에 대해 확신하지 못합니다. –

답변

0

페이지로 이동하십시오. 개발자 도구 (크롬에서 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

+0

옙, 문제 없습니다. 도움이된다면 대답으로 표시하는 것을 기억하십시오. –