2009-12-18 8 views
0

을 발견 할 때 나는 다음과 같은 DOM 구조가 있습니다 문제 - 오류 2 개 태그

/*:DOC += <div id='testDiv' class='testDivClass'><div id='innerTestDiv'></div></div><span id='testSpan' class='testSpanClass'><span id='innerTestSpan'></span></span> 

지금 내가 jQuery를이 다음과 같이 그들에 대해 선택 실행하려고합니다. 첫 번째 값은 반환되었지만 두 번째 값은 실패했습니다.

// works 
var result = $('#testDiv')[0]; 
alert(result.id); 

// failed: id is null or not an object 
var result2 = $('#testSpan')[0]; 
alert(result2.id); 

클래스 대신 id를 선택하여 동일한 결과를 얻었습니다.

내 질문은 : 두 번째 선택을 어떻게 작동시킬 수 있습니까? 두 번째 선택하기 전에 DOM의 시작 부분을 다시 설정해야하는 jQuery에 보이지 않는 반복자/포인터가 있습니까?

감사합니다.

편집 : 확인 이것은 공식 "작동하지 않음"버전입니다. testDiv가 일치하지만 testSpan이 아니므로 ID가 null이거나 두 번째 경고의 객체 오류가 아니라는 오류가 발생합니다.

업데이트 : 나는 html에서 testDiv와 testSpan을 교체하여 테스트를 수행했습니다. 이제 모두 선택에 실패했습니다.

UPDATE2 : HTML을 원래 모양으로 변경했습니다. JsTestDriver를 사용하여 테스트를 작성했지만 현재 실제로는 아무것도 호출하지 않습니다. 실제 HTML은 이보다 더 복잡합니다 (중첩 태그가 많음). 이 간단한 버전을 먼저 작동 시키려고 노력 중입니다. jQuery가 span이나 div 일지라도 첫 번째 선택에 들어갈 수 있었지만 두 번째 선택을 수행 할 수 없었습니다. 나는 jQuery.js와 jsTestDriver.jar를 쓸모 없게 바꿨다.

감사합니다.

+0

많은 오식에 사과드립니다. 나는 코드의 1 버전으로 다른 화면을보고 있었고, 내 마음 속에 다른 버전의 코드를 가지고 있었고, 이전에 삭제 한 코드를 기억했다. 혼란이 내 마음을 지배한다.> _> ... – BeraCim

+1

이 코드인가? DOM이로드 된 후에 실행됩니까? – Greg

+0

@Greg : DOM을로드하기 전에 명확하게 아니요. 나는 누군가가 내 코드에서 DOM 선언을 제거한 것을 알아 차렸다. – BeraCim

답변

1

나는 결국 div 태그 또는 span 태그로 전체 HTML을 래핑합니다. jQuery가 div/span 태그에서 빠져 나올 수 없다는 것을 발견했습니다. 위 예제에서 div/span 태그로 들어가야합니다.

패치 또는 추한 수정인지는 모르지만 당장은 문제가 해결되었습니다.

모든 도움에 감사드립니다!

0

"#"을 사용하여 ID로 선택하고 "."을 사용하십시오. 클래스로 선택할 ...

+0

내 질문에 너무 많은 오타가 있습니다 ... 지금 업데이트되었습니다. – BeraCim

2

.className 선택자는 ID가 아닌 클래스별로 일치합니다.
따라서 $(span.testSpan)은 어떤 요소와도 일치하지 않습니다.
$('span.testSpanClass') ot $(span#testSpan') (ID와 일치하는 #id 선택기 사용)으로 변경해야합니다.

자세한 내용은 documentation을 참조하십시오.

+0

죄송합니다. 제 질문에 오타가 너무 많았습니다 ... 지금 업데이트되었습니다. – BeraCim

1

왜 그런지 모르겠지만 내 코드는 잘 작동합니다.

해당 코드 앞에 $(document).ready(function() {을 추가했는데 테스트 페이지를 열면 경고 상자가 완벽하게 나타났습니다. 이 경고 상자가 언제 보여지기를 원하는지 모르지만 방문자가 페이지를 열 때 해당 코드를 추가하면됩니다. 그렇지 않으면

function objectid() { 
var result = $('#testDiv')[0]; 
alert(result.id); 
var result2 = $('#testSpan')[0]; 
alert(result2.id); 
} 

을 추가하십시오.이 코드는 저에게 잘 맞았습니다.

추신 : 내 나쁜 영어를 이해하지 못해 죄송합니다.

1

아마도 실제로 사용중인 HTML에는 다른 문제가 있습니다. html의 작은 부분 만 게시하고 있기 때문에 실제로 문제를 테스트 할 수는 없습니다. 전체 페이지를 게시하거나 테스트를 실행할 때 실제로 문제가있는 가장 작은 부분을 게시하십시오.

+0

동의합니다. 그럴 가능성이 더 큰 것 같습니다. 완전한 jQuery 코드와 HTML을 볼 수 있다면 도움이 될 것입니다. – kiamlaluno

1

JS Bin에 신고 한 jQuery 코드를 테스트 한 결과 코드가 정상적으로 작동했습니다.코드가 매우 기본 적이기 때문에이 문제는 jQuery 버전에서 사용 된 것으로 생각하지 않습니다.