각 상황에서 원소의 넓이 획득
3965 단어 얻다
상황 1, 원소 스타일 속성 설정width/height
<div style="width:100px;">test<div>
<script>
var div = document.getElementsByTagName('div')[0];
alert(div.style.width);
</script>
위와 같이el을 사용합니다.style.width만 있으면 돼요.스타일 속성에width를 설정하지 않으면el을 사용합니다.style.width는 얻을 수 없습니다. 아래와 같습니다.
<div>test<div>
<script>
var div = document.getElementsByTagName('div')[0];
alert(div.style.width);
</script>
모든 브라우저에서 팝업된 문자열은 빈 문자열입니다.페이지의 css에 스타일을 박아도 얻을 수 없습니다. 아래와 같습니다.
<style>
div {width: 100px}
</style>
<div>test<div>
<script>
var div = document.getElementsByTagName('div')[0];
alert(div.style.width);
</script>
이 때 getComputedStyle이나currentStyle이 도움이 될 것입니다.
상황2, 요소는 스타일시트 설정을 통해 width/height
스타일시트를 도입하는 두 가지 방법이 있는데 하나는 링크 라벨을 사용하여 단독 css 파일을 도입하는 것이고, 다른 하나는 html 페이지에서 스타일 라벨을 직접 사용하는 것이다.여기서는 두 번째 방식으로 테스트를 한다.아래와 같다
<style>
div {width: 100px}
</style>
<div>test<div>
<script>
function getStyle(el, name) {
if(window.getComputedStyle) {
return window.getComputedStyle(el, null);
}else{
return el.currentStyle;
}
}
var div = document.getElementsByTagName('div')[0];
alert(getStyle(div, 'width'));
</script>
모든 브라우저에서 100px가 팝업됩니다.설명은 getComputedStyle과currentStyle을 통해 요소가 스타일시트에 정의된 너비를 얻을 수 있습니다.
만약 요소가 스타일 속성에 넓이를 설정하지 않았거나 스타일시트에 넓이를 설정하지 않았다면 getComputedStyle이나currentStyle로 가져올 수 있습니까?정답은 getComputedStyle 가능,currentStyle 불가입니다.아래와 같다
<div>test<div>
<script>
function getStyle(el, name) {
if(window.getComputedStyle) {
return window.getComputedStyle(el, null);
}else{
return el.currentStyle;
}
}
var div = document.getElementsByTagName('div')[0];
alert(getStyle(div, 'width'));
</script>
div는 스타일 속성을 설정하지 않았고 스타일시트를 도입하지 않았습니다.Firefox/IE9/SAfari/Chrome/Opera에서는 너비(브라우저 기본값)를 얻을 수 있지만 IE6/7/8에서는 안 됩니다오토 반환.
여기서 getStyle 방법은 getComputedStyle을 우선적으로 사용하고 IE9은 이미 이 방법을 지원합니다.따라서 IE9에서 폭을 얻을 수 있습니다.IE6/7/8은 지원되지 않으며 currentStyle을 사용해서만 가져올 수 있습니다.
상황 3. 요소는 스타일 속성을 설정하지 않았고 스타일시트를 도입하지 않았다.
<div>test<div>
<script>
function getStyle(el,name) {
if(window.getComputedStyle) {
return window.getComputedStyle(el, null)[name];
}else{
return el.currentStyle[name];
}
}
function getWH(el, name) {
var val = name === "width" ? el.offsetWidth : el.offsetHeight,
which = name === "width" ? ['Left', 'Right'] : ['Top', 'Bottom'];
// display is none
if(val === 0) {
return 0;
}
for(var i = 0, a; a = which[i++];) {
val -= parseFloat( getStyle(el, "border" + a + "Width") ) || 0;
val -= parseFloat( getStyle(el, "padding" + a) ) || 0;
}
return val + 'px';
}
var div = document.getElementsByTagName('div')[0];
alert(getWH(div, 'width'));
</script>
사고방식은 매우 간단하다. 원소의offsetWidth/offsetHeight를 가져오고 원소의padding과border를 뺀다.
관련:
http://www.cnblogs.com/snandy/archive/2011/09/05/2167056.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
vue 단일 파일 구성 요소에서 $refs를 가져올 수 없는 문제웹pack+vue를 배우는 데 부딪힌 큰 구덩이를 기록해 보세요. 이 구덩이를 밟는 것은 저의 재능과 학문이 얕은 표현입니다. 이를 경계로 삼겠습니다.왜냐하면 이 구덩이는 정말 너무 구덩이야! 코드 header.ht...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.