2014-12-03 2 views
0

정말 간단하게하려고했는데 코드를 디버깅하기 시작했을 때, 내가 그것을 보았을 때까지 무엇이 잘못되었는지 알지 못했습니다. 이 간단한 기능은 Firefox 나 IE 11에서는 작동하지 않지만 Chrome에서는 작동한다고 믿을 수 없습니다.파이어 폭스와 IE 11의 jquery css 함수의 이상한 동작

2 개의 CSS 클래스가있는 div 요소가 있다고 상상해보십시오.

<div id="box" class="class1 class2"></div> 

여기서 class2는 border-top 속성을 갖습니다.

.class2 { 
    border-top: 1px solid #626262; 
} 

이제이 상자 div에 border-top 속성이 있는지 확인하고 싶습니다.

당신이 생각하는 우선입니다 :

$("#box").css("border-top") 

오른쪽? border-top 속성을 반환합니다 (있는 경우). 이것은 Chrome에서 작동하며 border-top 속성을 반환합니다 ... Firefox에서 IE 11은 빈 문자열을 반환합니다. 어떻게 가능합니까?

무엇이 잘못 될지 알고 싶습니다. 또는 다른 모든 방법으로 모든 브라우저에서 가져올 수 있습니까?

미리 감사드립니다.

EDITED : 나에게 효과가있는 뭔가 다른 일을 끝 냈지만 아무런 관련이 없습니다. 방금 테두리의 너비에주의를 기울 였고 너비가 0px가 아닌 값을 적용합니다. "0px none # 000000"으로 아무런 이유없이 다른 기본 테두리 스타일을 사용했기 때문에 더욱 의미가 있습니다.

+1

각 브라우저에는 요소 스타일을 계산하는 고유 한 방법이 있습니다. 자, 대신 수업을 확인해 보는게 어때? callAnyMethod()' –

+0

이건 동적 일 뿐이에요. 모르겠어요. '($ ("# box"). hasClass ('class2 '))'$ ('# box.class2 ' DOM 요소에 추가 할 수있는 클래스 그래서 직접 재산 자체를 확인해야합니다. – msqar

+0

소리가 xy 문제와 같습니다. 어쩌면 문제를 더 잘 설명 할 수 있습니다. 계산 된 스타일을 확인해야하는 이유는 무엇입니까? –

답변

3

:

Retrieval of shorthand CSS properties (e.g., margin, background, border), although functional with some browsers, is not guaranteed. For example, if you want to retrieve the rendered border-width, use: $(elem).css("borderTopWidth"), $(elem).css("borderBottomWidth"), and so on.

css() method

그래서 기본적으로 각 브라우저가 원래의 접근 방식을 사용하여 여러 속성에 사용하는 것을 찾아해야합니다 .... 아니면 A. 울프가 제안 할 그냥 대신 클래스를 확인할 수 있습니다.

1

좀 더 원자 적 CSS 속성 (예 : "border-top"대신 0이 아닌 "border-top-width")을 찾으려고 했습니까?

+0

그게 작동하지만 ... 왜 국경 정상 작동하지 않을까요? : C – msqar

+0

이전에이 프로그램을 실행 한 적이 없지만 브라우저 (또는 브라우저 별 CSS 속성에 대한 jQuery의 번역)처럼 들리면 복잡한 CSS 등록 정보를 매우 일관되게 검색 할 수 없습니다. –

1

당신은 border-top-width 같은 단일 값 속성의 계산 된 값을 얻을 수 있어야하지만 border-top 같은 다중 값 속성에 대한 jQuery로 모두 브라우저와의 차이뿐만 아니라 DOM의 API가 있습니다 :

가 CSS에 대한 jQuery를 워드 프로세서에 따르면

for (var properties = ['border-top', 'border-top-width'], i = 0, l = properties.length; i < l; i++) { 
 
    console.log(properties[i] + ': ' + $('#box').css(properties[i])); 
 
    console.log(properties[i] + ': ' + window.getComputedStyle(document.getElementById('box')).getPropertyValue(properties[i])); 
 
    }
.class2 { 
 
    border-top: 1px solid #626262; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="box" class="class1 class2">This is a test.</div>

+0

Firefox에서 border-top이 콘솔에 표시되지 않지만 Chrome에 표시되는 것을 보셨습니까? FF의 border-top-width 만 보여줍니다. – msqar

+0

예,'getComputedStyle'과 ('getComputedStyle'에 의존하는)'css' 메소드 모두에서 차이점이 있음을 보여줍니다. 그래서'border-top-width'를 체크하는 한, 속기 속성이 아닌 일관된 결과를 얻어야합니다. –

+0

yea, im f * cked, 나는 국경을 필요로했다. – msqar