2010-05-07 5 views
9

페이지에있는 태그를 모두 선택하려고합니다. how John Resig does it과 비슷한 HTML 템플릿을 저장하려면 <script> 태그를 사용합니다. 몇 가지 이유를 들어, 다음 JQuery와 선택은 무엇을 선택하지 않는 것 :스크립트 태그에 jquery selector 문제가 발생했습니다.

$("script[type*=html]").each(function() { 
    alert("Found script "+this.id); 
}); 

이 태그는 HTML 문서의 BODY에 있습니다

<body> 
    <script id="filter-search" type="text/html"> 
     <dt>Search</dt> 
     <dd><input type="text"/></dd> 
    </script> 
</body> 

나는 또한으로 퍼팅 시도했다 HTML 문서의 HEAD는 여전히 발견되지 않습니다. 경고가 표시되지 않습니다.

내가 대신에 코드를 변경하는 경우 :

$("script[type*=javascript]").each(function() { 
    alert("Found script "+this.id); 
}); 

는 그 다음 외부 파일에 src이있는 HEAD 만 스크립트를 찾습니다. 실제 페이지의 스크립트를 찾을 수 없습니다. 예를 들어, HEAD에 다음과 :

<head> 
    <script type="text/javascript" src="jquery.js" id="jquery"></script> 
    <script type="text/javascript" src="jquery-ui.js" id="ui"></script> 
    <script type="text/javascript" id="custom"> 
     $(document).ready(function() { 
      $("script[type*=javascript]").each(function() { 
       alert("Found script "+this.id); 
      });   
      $("script[type*=html]").each(function() { 
       alert("Found TEMPLATE script "+this.id); 
      });   
     }); 
    </script> 
    <script id="filter-test" type="text/html"> 
     <dt>Test</dt> 
    </script> 
</head> 
<body> 
    <script id="filter-search" type="text/html"> 
     <dt>Search</dt> 
     <dd><input type="text"/></dd> 
    </script> 
</body> 

나는 다음과 같은 경고를 얻을 :

  • 찾을 스크립트 JQuery와
  • 찾을 스크립트에서

customfilter-test 스크립트 UI를 HEAD가 선택되지 않았으며 body 태그에 filter-search 스크립트가 없습니다.

이것은 예상되는 동작입니까? 왜 이것이 작동하지 않습니까? 나는 그 문제를 해결할 수 있지만 그것이 효과가 없다는 것은 짜증나게한다.

편집 : 위의 예를 사용하면 실제로 잘 작동합니다. 제 상황에서는 jquery 코드가 외부 Javascript 모듈에 있었고 확실히 작동하지 않았습니다. 페이지 자체에서 코드를 스크립트 태그로 옮겼습니다. 나는 아직도 외부 파일에서 작동하지 않는 이유를 알아 내지 못했지만 어떤 지점에서 해결할 수 있다면 여기로 돌아올 것입니다.

+0

크롬에서 jQuery 1.4.2로 스크립트를 실행하면 원하는 모든 ID가 알립니다. – jAndy

+0

@tauren 최근에 비슷한 문제가있었습니다. 제발 시도해보십시오 실험 : 텍스트/HTML을 다른 것으로 바꾸십시오 (텍스트/템플릿 제안). 그러면 외부 스크립트와 호환되는지 확인하십시오. – UpTheCreek

답변

2

어떤 브라우저를 사용하고 있습니까?

  • 찾을 스크립트 JQuery와
  • 찾을 스크립트가
  • 찾을 스크립트 사용자 정의
  • 찾을 템플릿 스크립트 필터 테스트
  • 을 UI :이 스크립트는 경고 나에게주고, 크롬, 파이어 폭스와 IE6에서 나를 위해 잘 작동
  • TEMPLATE 스크립트 필터 검색
+0

jquery에 코드를 입력하면 작동합니다. HTML 자체에서 준비 완료. 내 질문에 정확히 스크립트 대신 가져 오는 외부 자바 스크립트 모듈 내에서 실행되는 코드를 테스트했습니다. 아직도 외부 스크립트 모듈에서 실행할 때 작동하지 않는 이유를 이해하지 못합니다. 나는 언젠가 그것을 조사해야 할 것이다. 하지만 적어도 로컬 스크립트에서 작동합니다. 그것을 테스트 해 주셔서 감사합니다! – Tauren

1

로드 순서로 인한 외부 스크립트의 문제 일 가능성이 높습니다. 응답 속도를 극대화하기 위해 브라우저는 페이지가 완전히 다운로드되고 파싱되기 전에 페이지에서 발생한 스크립트로드 및 실행을 시작합니다. 따라서 head 요소에 연결된 스크립트가있는 경우 사용자 지정 스크립트 태그와 같이 페이지 아래쪽에 지정된 DOM 부분에 액세스 할 수 없을 것입니다.

두 가지 가능한 솔루션 : 사용자 정의 태그를 사용하는 스크립트 앞에 오는 있도록

  • 스크립트 태그를 정렬합니다.
  • DOM을로드 할 때까지 대기하는 스크립트 (예 : jQuery $() shortcut)로 스크립트를 래핑하십시오.