2011-08-22 2 views
1

jQuery .post()를 사용하여 다른 페이지의 내용을로드하려고 시도했습니다. 반환 된 HTML을 구문 분석하여 원하는 부분 만 추출합니다.jQuery find()는 IE에서만 null을 반환합니다.

이 문제는 Firefox에서 작동하지만 IE에서는 작동하지 않습니다.

나는이 문제를 find() 함수로 추적했다. IE와 FF 모두 게시를 사용하여 해당 "데이터"개체에 저장된 다른 페이지에서 html을로드합니다. 그러나 라인이

debugText += jq(data).find('#timeline_events').html(); 

은 출력이 Firefox에서 생성되는 동안 IE에서 null을 생성합니다.

나는 광범위한 연구를 해왔으며 jquery 충돌로 인해 또는로드되는 페이지가 xhtml로 인해 발생할 수 있습니다.

첫 번째 경우에는 var jq = jQuery.noConflict()를 사용하고 모든 jquery 호출에 "$"대신 "jq"를 사용하기 때문입니다. 두 번째 경우에는 결과에 변화가없는 HTML 및 XML에 명시 적으로 포스트 리턴 데이터 유형을 선언했습니다.

아이디어가 있으십니까? 업데이트

<script type="text/javascript" charset="utf-8"> 
var jq=jQuery.noConflict(); 
var debugText = ""; 
function loadNext() 
{ 
    jq.post("test.html", function(data) 
    { 
     debugText += jq(data).find('#myEvents').html(); 
    } 
} 
</script> 

: 여기 내가 현재 페이지에로드 할 테스트 페이지에서 일부 HTML의 샘플입니다

<table id="myEvents"> 
    <tbody> 
     <tr> 
      <td>Test</td> 
     </tr> 
    </tbody> 
</table> 

내가 궁극적으로하고 싶은 것입니다 것은 빼이다 그 테이블의 td 요소를 현재 페이지의 다른 테이블에 삽입하십시오.

-Update- jQuery를 버전 내가 사용 : 필요한 id 요소를 선택 jQuery를 사용하고 문서에 숨겨진 개체에 데이터를로드 1.2.3

하고는 동일한 결과를 생성 - 즉 , IE에서 null, 그리고 그렇지 않으면 작동합니다.

+1

하나 이상의 요소에'id = "timeline_events"가 있습니까? – thirtydot

+0

'jq ("# timeline_events", data)' –

+1

응답 데이터에 마크 업이 잘 형성되어 있습니까? 그것은 때때로 IE에서 문제를 만듭니다. – ShankarSangoli

답변

0

제 생각에 jQuery는 XML을 구문 분석하는 것처럼 응답을 구문 분석합니다. 즉, find, filter을 의미하며 다른 많은 메소드가 IE에서 여러 가지 이유로 손상되었습니다.

.html()도 작동하지 않을 수 있습니다 jq('[id=timeline_events]', data) 시도; .text()이 필요할 수 있습니다.

더 나은 해결책은 페이지에 응답을 추가하고 거기에 구문 분석하는 것일 수 있습니다.

function(data){ 
    var $container = $('<div style="display:none">'); 
    $('body').append($container); 
    $container.html(data); 
    var html = $container.find('#timeline_events").html(); 
    $container.remove(); 
} 
+1

나는 이것을 시도했다. IE에서 여전히 null을 반환한다. 비록 페이지에 삽입 된 html을 검색하고있다. 이제는 이상합니다. 한 가지는, 내가 가져 오는 html에는 head, body 등의 태그가 있기 때문에 페이지에 추가 할 때 문제가 발생할 수 있습니다 ... – erj

+0

그래, 맞을 것 같습니다. 첫 번째 에서 마지막으로까지 부분 문자열을 추가하고 * that *을 페이지에 삽입 할 수 있습니까? –

+0

또한 id가있는'find' 대신'$ ('# timeline_events')'를 선택하십시오. –

2

IE는 DOM에 "로드"되는 것과 매우 다릅니다. 당신의 내용이 잘 형성되지 않았다면 당신은이 정확한 행동을 취할 것입니다. 나는이 같은 문제가 있었고 문제의 요소가 제대로 닫히지 않은 부모를 가졌다는 것이 밝혀졌습니다.

+0

나는 내용이 잘 형성되어 있는지 확인하고 확인했다. – erj

+0

부록 - MY 코드가 제대로 구성되었는지 확인하고 확인했습니다. 그러나 제 3 자 CMS 내부에 html이 자동으로로드되는 페이지가 있습니다. 일부 형식이 잘못되었을 수도 있습니다. 그렇다면 해결 방법이 있습니까? 아니면 필자가 필요로하는 것들을 꺼내기 위해 내 자신의 코드 파서를 작성해야합니까? – erj

관련 문제