2010-05-18 4 views
1

웹 페이지는 여기에 있습니다 : http://develop.macmee.com/testdev/이 자바 스크립트는 Internet Explorer를 제외하고 모든 브라우저에서 작동합니다!

나는 당신을 클릭 할 때 말하는거야? 왼쪽에는 더 많은 내용이 들어있는 상자가 열리기로되어 있습니다. 그것은 IE를 제외한 모든 브라우저에서 해당 작업을 수행합니다!

function question() 
{ 
    $('.rulesMiddle').load('faq.php?faq=rules_main',function(){//load page into .rulesMiddle 

     var rulesa = document.getElementById('rulesMiddle').innerHTML; 
     var rules = rulesa.split('<div class="blockbody">');//split to chop off the top above rules 

     var rulesT = rules[1].split('<form class="block');//split to chop off below rules 
     rulesT[0] = rulesT[0].replace('class=','vbclass');//get rid of those nasty vbulletin defined classes 
     document.getElementById('rulesMiddle').innerHTML = rulesT[0];//readd the content back into the DIV 
     $('.rulesMain').slideToggle();//display the DIV 
     $('.rulesMain').center();//center DIV 
     $('.rulesMain').css('top','20px');//align with top 
    }); 
} 
+0

Firefox에서 페이지를 http://develop.macmee.com/testdev/로 리디렉션 중입니다. – Glennular

+0

경고/오류가 발생합니까? – zaf

+0

즉, 스크립트 오류가 발생합니까? 그렇다면 여기에 게시 할 수 있습니다 –

답변

6

IE는 innerHTML 내용을 대문자로 변환하므로 문자열 작업이 대소 문자를 구분하므로이 방법으로 문자열을 분할 할 수 없습니다. 내용이 실제로 어떻게 보이는지 확인하십시오.

alert(rulesa); 
+0

오른쪽 - 아마도 split()을 시도하기 전에 innerHTML toLowerCase()를 강제 실행 해보십시오. – liquidleaf

0

해당 버튼을 클릭하면 내 IE 디버거에서 스크립트에 오류가 발생합니다. 이 라인에서 :

var rulesT = rules[1].split('<form class="block');//split to chop off below rules 

IE는 자바 스크립트 처리를 중지하고 '1' is null or not an object

+0

이것은 분할 명령이 사전에 일치하지 않았기 때문에 규칙 [1]이 비어 있거나 존재하지 않을 가능성이 높습니다. – liquidleaf

4

안드리 잘 말한다. 그리고 그게 전부가 아닙니다. 또한 속성에 따옴표를 버릴 것입니다.

innerHTML에서 가져온 문자열의 형식에 대한 가정을 완전히 신뢰할 수 없습니다. 브라우저는 다양한 형식으로 출력 할 수 있습니다. IE의 경우 HTML 중 일부는 유효하지 않습니다. 원래 파싱 된 동일한 문자열을 되 찾는 기회는 매우 낮습니다.

일반적으로 HTML 문자열 해킹은 시간 낭비입니다. 대신 노드 객체를 사용하여 HTML 요소를 수정하십시오. 당신은 jQuery를 사용하고있는 것처럼 보이므로, 당신을 돕기위한 많은 유틸리티 함수가 있습니다.

어쨌든 전체 HTML 페이지를 #rulesMiddle에로드하지 않아야합니다. 여기에는 들어갈 수없는 스크립트 및 스타일 시트 및 기타 머리말을 포함합니다. jQuery를 사용하면 삽입 할 문서의 부분을 선택할 수 있습니다. 당신은 단지 첫 번째 .blockbody 요소를 원하는 것 같다, 그래서를 선택 :

$('#rulesMiddle').load('faq.php?faq=rules_main .blockbody:first', function(){ 
    $('#rulesMiddle .blockrow').attr('class', ''); 
    $('.rulesMain').slideToggle(); 
    $('.rulesMain').css('top', '20px'); 
}); 
0
당신이 그것을 해결하는 경우

는 모르겠지만, Btw는 내 미운 IE (그 V8)

에서의 작업 : 나야, 아니면 열리는 팝업 창과자가 정말로, 정말로, 정말로 그 플랫폼을 늦추는가?

관련 문제