Предположим, что у меня есть следующее.
HTML:
<div id="foo"></div>
CSS:
#foo{
width: 150px;
}
JS:
document.getElementById("foo").style.width //Equals to "" instead of 150px
$("#foo").css("width") //equals to the expected "150px"
или это JSFiddle. Почему мы можем получить доступ к ширине элемента, используя jQuery, но не используя vanilla JS? Это потому, что внешние правила CSS не являются частью DOM?
Используйте getComputedStyle
. Смотрите эту обновленную скрипту:
computedWidth = window.getComputedStyle(document.getElementById("foo"), null).
getPropertyValue("width");
elem.style
просто вернет вам встроенные стили, связанные с элементом, то есть содержимое атрибута style=""
.
Попробуйте offsetWidth. Когда вы пытаетесь получить доступ к style.width
, он даст вам только ширину, назначенную свойству стиля элемента. Но в вашем случае ему назначается ширина по правилу css.
document.getElementById("foo").offsetWidth;
Edit: clientWidth, вероятно, будет более уместным, так как он дает вам внутреннюю ширину элемента, где offsetWidth также рассматривает границы, поля.
offsetWidth
будет включать границы и поля и, следовательно, не эквивалентенwidth
CSS.clientWidth
будет более подходящим, но все равно не обязательно отражает ширину CSS, всегда (полосы прокрутки).