Опредилить высоту таблицы
Как определить высоту таблицы созданой в JS в определённом <div id="tablica">
document.getElementById('tablica').height - не подходит. Очень надо. |
искать нужно уссерднее
Измерения окна, документа и элементов |
document.getElementById('tablica').offsetHeight
|
При document.getElementById('tablica').offsetHeight
Хм, alert возвращает ноль. Я посмотрел код с FireBud и он показал что teblica не имеет значения hight. Возможно поэтому я и получаю ноль. Но если есть таблица значит где-то должны быть и её данные?? |
неужели это заметил только я?
вы сейчас у чего пытаетесь выяснить высоту? явно не у таблицы. а у содержащего ее дива(да, бывает такое что див меньше, чем содержащиеся в нем элементы) document.getElementById('tablica').getElementsByTagName('table')[0].offsetHeight |
Вложений: 1
У меня посложнее будет ситуация.
Сверху можно увидить что стоит в div="tablica" но в нём оказывается не таблица а полныв полно других дивов. А команда document.getElementById('tablica').getElementsByTagName('table')[0].offsetHeight выдаёт ошибку . Как получить полный размер дива? |
в зависимости от того, как вы используете CSS ваш див может быть размеом меньше, чем элементы содержащиеся в нем.
попробуйте например посчитать сумму всех дочерних элементов. если не получится, приложите в атаче образец вашей странички для теста. потому что телепатически можно долго гадать, что у вас там происходит. |
Вы мне предлогаете пощитать "на пальцах" или с помощью программы(функции)?
Таблица каждый раз разных размеров поэтому "на пальцах" щитать бесполезно. А как пощитать дочерние элементоы понятия не имею. |
почитайте раздел статей, где говорится про DOM
а вот так примерно будет выглядеть "посчитать" elem=document.getElementById('tablica') _offsetHeight=0; children=elem.childNodes for(i=0,s=children.length;i<s;i++) { if(children[i].nodeType==1)//только потомки-теги.без чисто текстовых нод { _offsetHeight+=children[i].offsetHeight;//суммируем } } alert(_offsetHeight); извините что без ворматирования.набирал прямо тут только может не сработать, если потомки страдают той же "болезнью", что и родитель, то есть имеют меньший размер, чем содержимое. все зависит от вашего CSS. но, в принципе описанное действие можно проводить рекурсивно. кжется так и делают в jQuery |
Gvozd,
издеваешься чтоли? Это вообще не будет работать в большинстве случаев. |
В щетчике тоже ноль выкидывает.
Код впринцепи не большой попробуйте запустить у себя если несложно, может увидите то чего не вижу я... <title>Golfclub suche</title> <style type="text/css"> /* Start of css that is not needed for the script */ body{ font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif; margin-top:0px; background-image:url('../../images/heading3.gif'); background-repeat:no-repeat; padding-top:10px; } p{ margin-top:0px; } a{ color:#660000; text-decoration:none; } /* End of css that is not needed for the script */ /* Don't delete anything below here */ .dhtmlgoodies_contentBox{ border:1px solid #317082; height:100%; visibility:hidden; position:absolute; background-color:#E2EBED; overflow: auto; padding:2px; width:600px; } .dhtmlgoodies_content{ position:relative; font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif; width:100%; font-size:0.8em; } </style> <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAqhsoVuEo3BxAXgujPIiHdhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTtTNmWH0QF_Ew4EPElCVnWRPcXSQ" type="text/javascript"></script> <script type="text/javascript"> var slideDownInitHeight = new Array(); var slidedown_direction = new Array(); var slidedownActive = false; var contentHeight = false; var slidedownSpeed = 8; // Higher value = faster script var slidedownTimer = 7; // Lower value = faster script var slidedownContentBox; function slidedown_showHide(boxId) { start(); if(!slidedown_direction[boxId])slidedown_direction[boxId] = 1; if(!slideDownInitHeight[boxId])slideDownInitHeight[boxId] = 0; if(slideDownInitHeight[boxId]==0)slidedown_direction[boxId]=slidedownSpeed; else slidedown_direction[boxId] = slidedownSpeed*-1; slidedownContentBox = document.getElementById(boxId); var subDivs = slidedownContentBox.getElementsByTagName('DIV'); for(var no=0;no<subDivs.length;no++){ if(subDivs[no].className=='dhtmlgoodies_content')slidedownContent = subDivs[no]; } contentHeight = slidedownContent.offsetHeight; slidedownContentBox.style.visibility='visible'; slidedownActive = true; slidedown_showHide_start(slidedownContentBox,slidedownContent); } function slidedown_showHide_start(slidedownContentBox,slidedownContent) { if(!slidedownActive)return; slideDownInitHeight[slidedownContentBox.id] = slideDownInitHeight[slidedownContentBox.id]/1 + slidedown_direction[slidedownContentBox.id]; if(slideDownInitHeight[slidedownContentBox.id] <= 0){ slidedownActive = false; slidedownContentBox.style.visibility='hidden'; slideDownInitHeight[slidedownContentBox.id] = 0; } if(slideDownInitHeight[slidedownContentBox.id]>contentHeight){ slidedownActive = false; } slidedownContentBox.style.height = slideDownInitHeight[slidedownContentBox.id] + 'px'; slidedownContent.style.top = slideDownInitHeight[slidedownContentBox.id] - contentHeight + 'px'; setTimeout('slidedown_showHide_start(document.getElementById("' + slidedownContentBox.id + '"),document.getElementById("' + slidedownContent.id + '"))',slidedownTimer); // Choose a lower value than 10 to make the script move faster } function setSlideDownSpeed(newSpeed) { slidedownSpeed = newSpeed; } </script> </head> <body onunload="GUnload()"> <div> <div id="dhtmlgoodies_control"><a href="#" onclick="slidedown_showHide('box1');return false;">Show/Hide map</a></div> <div class="dhtmlgoodies_contentBox" id="box1"> <div class="dhtmlgoodies_content" id="subBox1"> <div id="map" style="width: 600px; height: 600px"></div><br> <div id="verbindung"> <table border="0"> <tr> <td> <input type="text" name="zieladresse" id="zieladresse"/> </td> <td> <a href="javascript:makeDirection()" value="Verbindung suchen..">Verbindung suchen..</a> </td> </tr> </table> </div> <div id="directions"></div> <div id="tabelle"></div> </div> </div> </div> <script type="text/javascript"> var gdir=null; var i = 0; var geocoder; var map; var side_bar_html; var address; function myclick(i) { gmarkers[i].openInfoWindowHtml(htmls[i],{maxWidth:230}); } function start(){ geocoder = new GClientGeocoder(); side_bar_html = ""; var gmarkers = []; var htmls = []; map = new GMap2(document.getElementById("map")); map.addControl(new GSmallMapControl()); map.addControl(new GMapTypeControl()); var mt = map.getMapTypes(); address = "Bonn"; geocoder.getLocations(address, addAddressToMap); } function addAddressToMap(response){ if (!response || response.Status.code != 200) { alert("Die eingegebene Adresse konnte nicht gefunden werden."); } else { place = response.Placemark[0]; point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]); map.setCenter(new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]),11); marker = new GMarker(point); map.addOverlay(marker); marker.openInfoWindowHtml("info"); GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(info); }); side_bar_html += '<a href="javascript:myclick(' + i + ')">' + name + '</a><br>'; i++; } } function makeDirection(){ var tablica = document.createElement("div"); tablica.setAttribute("id", "tablica"); document.getElementById('subBox1').appendChild(tablica); gdir = new GDirections(map, document.getElementById("tablica")); setDirections(document.getElementById("zieladresse").value, address, "de"); } function setDirections(fromAddress, toAddress, locale) { gdir.load("from: " + fromAddress + " to: " + toAddress,{ "locale": locale }); } </script> </body> |
Kolyaj,
нет. не издеваюсь. я искренне полагал, что этот способ должен сработать. Если вы знаете способ, который гарантировано(или хотя бы в большинстве случаев) будет работать, опубликуйте его. сам я эту задачу ранее не решал, поэтому все мои рассуждения на уровне "а почему бы не..." готовых решений у меня под рукой нет |
konstantinopol,
искренне не понимаю, как добится появления упомянутой таблицы |
А вы пробовали запустить добавленный скрипт??
|
Цитата:
|
Цитата:
--вопрос уже снят-- что я должен ввести в строку запроса, чтобы мне показало непустую таблицу? я по немецки не знаю, чот там от меня хочет. PS повесьте срабатывание makeDirection() не только на надпись, но и на нажатие enter-а |
Как я уже писал выше offsetHeight передаёт 0.
|
Цитата:
|
Пардон моя ошибка.
Нужно ввести город. Например Berlin или Leverkusen. Для начала мне нужно чтобы размеры правильные были а потом уже можно задуматься о enter |
console.log(document.getElementById('tablica').offsetHeight) выдал мне 1298 тестировалось в мозилле |
Где он тебе это выдал??
У меня ничего не выдаёт как бы я это не написал. |
да прямо в консоли фаербага написал, и оно мне выдало
|
Ну это конечно хороше что в консоле FireBug но где это нарисовать в коде чтобы он выдавал это значение???
Это тоже "небольшая" проблема. |
function makeDirection(){ var tablica = document.createElement("div"); tablica.setAttribute("id", "tablica"); document.getElementById('subBox1').appendChild(tablica); gdir = new GDirections(map, document.getElementById("tablica")); setDirections(document.getElementById("zieladresse").value, address, "de"); setTimeout(function(){alert(document.getElementById('tablica').offsetHeight)},5000); } повесил на "через 5 секунд", потому что понятия не имею, когда приходит с сервера ответ. можете посмтотреть в google-API сами этот момент. ищите обработчик события ответа с сервера |
Спасибо огромное за помощь. Всё работает как надо.
К сожалению : Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Gvozd. |
пожалуйста.
больше не наступайте на эти грабли с асинхронностью |
Постораюсь
|
Часовой пояс GMT +3, время: 21:21. |