Я создаю через String некоторые DOM-Elements и назначаю его через innerHTML в div. Теперь мне нужна гибкая ширина элемента span (span_homebase). То, что я испытываю, это то, что иногда (для меня это выглядит случайным образом) он возвращает другую ширину, чем ожидалось. Мне нужна ширина этого элемента span, потому что после этого в той же строке есть информационная кнопка, но ширина пролета может быть разной. Поэтому я использую ширину элемента span в качестве поля для информационной кнопки. Код выглядит следующим образом. Я искал асинхронный обработчик innerHTML, но в другом сообщении кто-то сказал, что он не требуется, потому что он назначается мгновенно. Есть ли мысли, что попробовать? Потому что информация сейчас иногда находится в нужном месте, а иногда нет.Javascript width of span element
string = string + "<span id ='span_homebase'>" + homebaseCity + "</span>";
string = string + "<div class='section-end'></div>";
element.innerHTML = string;
var marginInfoHomebase = document.getElementById('span_homebase').offsetWidth + 20;
document.getElementById("information_button_homebase").style.margin = "5px 0 0 " + marginInfoHomebase + "px";
Теперь, если открыть соответствующий сайт для меня иногда marginInfoHomebase иногда возвращает 108, а иногда и 183, даже если такое же значение присваивается охватывать элемент. Очень странно. Есть предположения?
EDIT: Рабочий пример:
function createHomeSettingsView(settingsA){
var element = document.getElementById("table-settings");
var string = "";
for(var i = 0; i < settingsA.length; i++){
for(var z = 0; z < settingsA[i].length; z++){
if(i == 1){
//Notification buttons
if(z == 1){
//homebase setting
if(window.localStorage.getItem("switch_homebase") == 1){
//homebase on
var homebaseCity = settingsA[i][z] + ": " + window.localStorage.getItem("homebase_loc");
string = string + " \
<div class='row' style='height:100px;' id='settings-sec-"+ i +"-row-" + z +"'> \
<div class='text'> \
<span id='span_homebase'>" + homebaseCity + "</span> \
</div> \
<div onClick='homebaseInfoClick();' class='information_button' id='information_button_homebase'></div>\
<div id='handleAutoSwitcherHomebase'></div>\
<div id='showRadiusRangeHomebase'>Radius: 30km</div>\
<input class='sliders' id='changeRadiusRangeHomebase' type='range' min='5' max='100' step='5' oninput='handleChangeHomebase(this.value)' onchange='handleInputHomebase(this.value)' >\
</div>";
}
else{
//homebase off
string = string + " \
<div class='row' id='settings-sec-"+ i +"-row-" + z +"'> \
<div class='text'>\
<span id='span_homebase'>" + settingsA[i][z] + "</span> \
</div> \
<div onClick='homebaseInfoClick();' class='information_button' id='information_button_homebase'></div>\
<div id='handleAutoSwitcherHomebase'></div>\
</div>";
}
}
}
}
}
element.innerHTML = string;
var marginInfoHomebase = document.getElementById("span_homebase").offsetWidth + 25;
var marginText = "5px 0 0 " + marginInfoHomebase + "px";
console.log("Span: " + marginInfoHomebase);
document.getElementById("information_button_homebase").style.margin = marginText;
}
CSS:
.container .table-settings{
top: 64px;
position: absolute;
padding:0;
left: 0;
right: 0;
bottom:0;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
background-color: #ECEBF3;
}
.container .table-settings .row{
background-color: white;
padding-top: 14px;
height:50px;
border-bottom: 1px solid LightGray;
}
.container .table-settings .row .text{
margin-left: 15px;
color: black;
float: left;
}
#span_homebase{
display: inline-block;
}
thats то, что я также в настоящее время обнаружил. Благодаря :)!! Теперь он работает каждый раз. Но было странно, что иногда это было правильно, а иногда и не –
фактически свойства измерения все еще существуют для элемента 'inline', но они динамически вычисляются (на основе содержимого и окружающих элементов' block' и 'inline-block'). Поэтому они могут быть правильными, иногда я думаю. – Supersharp
Я добавил это и работал. Но теперь я иногда обнаруживаю, что возможно возвращение трех разных значений. Как это могло быть? На самом деле я не знаю, почему. Я думал, что это исправлено сейчас, но иногда бывает, что он возвращает 184 или 208, но должен быть 224. Любые мысли? –