2013-06-15 5 views
-1
 var checkLeft= $('#left .module:hidden'); 
    if(checkLeft) { 
     if($('.resetLeft').length) { 
      left.prepend('<span class="resetLeft">Reset Left Widgets</span>'); 
     } 
    } 

제대로 작동하려면 약간의 문제가 있습니다. IE가 이것을 지원하지 않는다고 생각하기 때문에 실제로는 :hidden 의사 클래스를 원하지 않습니다. 기본적으로 나는 함수를 만들었고이 코드는 그 안에있다. 그리고 그것이 실행될 때 부모 요소 #left.module 클래스의 display:none 자식이 있는지 확인합니다. 나는 필터 함수를 사용했으며, 실제로 올바르게 응답하기 위해 두 개의 요소를 숨겨야했습니다. 이거 좋은 생각이야? 여기디스플레이 카운트 없음 요소 받기

는 jQuery를의 포인트는 크로스 브라우저를 작동하는 시작 JSBIN

http://jsbin.com/upuwix/1/edit

+0

_as는 this._ 그건 사실이 아니에요, jQuery를 그것을 지원합니다. – undefined

+0

감사합니다. 정의되지 않았습니다. 지원되지 않는다고 생각합니다. IE7 8 9 및 지원합니까? 내가 XP 사용자가 IE9 또는 10에 갈 수 없기 때문에 내가 질문하는 유일한 이유가있다. (적어도 XP를 사용하는 사람이 나에게 이것을 말했다). – EasyBB

답변

2

(의 일부)입니다. :hidden은 모든 브라우저에서 jQuery 선택기로 작동합니다. doco은 "jQuery 확장이며 CSS 사양의 일부가 아닙니다"라고 말합니다.

그러나, 당신의 if 테스트는 잘못된 것입니다 : 당신이 jQuery 오브젝트 자체를 테스트하기 때문에

if(checkLeft) { 

이 ... 항상 사실이 될 것입니다 - 객체는 항상 truthy 있습니다. 이미이 같은 기술을 사용하고 그 일 후에 줄에

if (checkLeft.length) { 

:

if($('.resetLeft').length) { 

을 그 라인을 제외하고 ... 당신은 어떤 요소가 당신의 선택과 일치하는지 확인합니다 .length을 테스트해야

if(!$('.resetLeft').length) { 
: 더 .resetLeft 요소가 아직 존재하지 않는 경우는 길이가, 즉, 0이면 그것이 사실되고 싶어요, 그래서 하나 .length === 0의 조건 또는 시험의 시작 부분에 !을 추가 - 당신은 뒤로 논리를 가지고

left 변수가 없어서 마지막으로 left.prepend(...)이 작동하지 않았습니다. 그것을 정의하거나 $('#left').prepend(...)을 사용하십시오.

업데이트 데모 : 나는 IE는 지원하지 않습니다 생각 http://jsbin.com/upuwix/3/edit

+0

예 나는 잠시 후 이것을 깨달았다. 그냥 조금 피곤해. 나는 시험장에서 길이를했다. 감사합니다;) 그냥 걱정 : 숨겨진 내가 당신이 제공 한 의사 링크를 읽을 것입니다 – EasyBB

+0

왼쪽 부분에 나쁜, 내가 정의한, 난 그냥 내 코드에서 추가 한 적이 없다 : X – EasyBB

+0

_ "나는 의사를 읽을 것이다 당신이 제공 한 링크 "_ - Cool. 다음 번에 질문을 게시하기 전에 문서를 읽고 제안하는 코드에서 변수 정의를 남기지 않도록 제안 할 수 있습니까? ': hidden'이 정말로 유일한 부분이라면 문제는 없습니다. – nnnnnn