Помогите вывести и посчитать значения ячеек в таблицах
Вложений: 1
Весь код страницы во вложенном файле.
в результате работы скрипта на страницу выводятся таблицы такого вида <div class="if_right"> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Уровень жизни</span> </td> <td class="if_ch_val ">18.4</td> </tr></tbody></table> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Эфф. доп. уровня жизни, %</span> </td> <td class="if_ch_val ">36.2</td> </tr> </tbody> </table> <div class="if_grp dbrown"> <div>Голова, руки, корпус, ноги:</div> </div> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Прочность доп. брони</span> </td> <td class="if_ch_val ">1.5</td> </tr> </tbody> </table> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Броня</span> </td> <td class="if_ch_val ">1.2</td> </tr> </tbody> </table><table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Стойк. к дробящему урону</span> </td> <td class="if_ch_val ">1.2</td> </tr> </tbody> </table> </div> таких дивов несколько. не могу сообразить как посчитать одинаковые ячейки таблиц (тобишь есть два дива нужно сложить значение ячеек к примеру с Прочность доп. брони) посоветовали сделать: function getElementsByClassName(classname, node) { if(!node) node = document.getElementsByTagName("body")[0]; var a = []; var re = new RegExp('\\b' + classname + '\\b'); var els = node.getElementsByTagName("*"); for(var i=0,j=els.length; i<j; i++) if(re.test(els[i].className))a.push(els[i]); return a; var elements = getElementsByClassName('if_ch_val'); var sum = 0; for (var key in elements) { sum += parseFloat(elements[key].innerHTML); } document.getElementById('result').innerHTML = sum; но выдает 0.. function calculate() { var a = document.getElementsByClassName("if_ch_value").value; var b = document.getElementsByClassName("if_ch_value").value; var c = a+b; document.getElementById("summa").value = с; } рабочий код можно посмотреть тут |
Цитата:
У табличек с данными всегда один класс - if_ch? |
да, классы всегда одни
|
Цитата:
Тогда ходи по всем табличкам, проверяй имя класса... Если это она - используй коллекции rows у таблички и cells у строк, проверяй значение первой ячейки (это как тип стороки) и значение второй (это собственно данные). Переводи все из строки в число и суммируй нужное... |
Спасибо, буду пробовать..
Но пока как то слабо себе это представляю:) |
Цитата:
|
нашел тут пример один решил по нему попробовать:
function getText(n) { var strings = []; getStrings(n, strings); return strings.join(" "); function getStrings(n, strings) { if (n.nodeType == 3 /* Node.TEXT_NODE */) strings.push(n.data); else if (n.nodeType == 1 /* Node.ELEMENT_NODE */) { for(var m = n.firstChild; m != null; m = m.nextSibling) { getStrings(m, strings); } } } } //перебирает все table на странице, пример с таблицами в первом посте. кнопкой <input value="Подсчет текста на странице" type="button" onClick="alert(getText(document.getElementsByTagName('table')[5]))"> получай из него в алерт результат в виде "Уровень жизни 18.4" Я так понимаю строку такого вида надо преобразовывать в строку только со значением вида "18,4"? а далее делать как то примерно так: function calculate(){ var a = getText(document.getElementsByTagName('table')[5])); var b = getText(document.getElementsByTagName('table')[10])); var c = a+b; document.getElementById("summa") = c; }-только такая конструкция не работает :-? |
uznik73, в твоём первоначальном примере "тип строки" и "цифра" были в разных ячейках...
|
uznik73, вот как выглядит путёвый тестовый пример...
<!DOCTYPE html> <html> <head> <title>test</title> <style type="text/css"> </style> <script type="text/javascript"> function Get() { var ot=document.getElementsByTagName('table') var i=0 var val while (ot[i]) { if (ot[i].className!='if_ch') { i++ continue } val=ot[i].rows[0].cells[1].innerHTML alert(val) i++ } } </script> </head> <body> <table> <tbody> <tr> <td> <span>Test</span> </td> <td>100</td> </tr> </tbody> </table> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Уровень жизни</span> </td> <td class="if_ch_val ">18.4</td> </tr> </tbody> </table> <button onclick='Get()'>Get</button> </body> </html> |
Спасибо. но так он мне выдает все результаты без разбора то есть если у меня идет такой код
<!DOCTYPE html> <html> <head> <title>test</title> <style type="text/css"> </style> <script type="text/javascript"> function Get() { var ot=document.getElementsByTagName('table') var i=0 var val while (ot[i]) { if (ot[i].className!='if_ch') { i++ continue } val=ot[i].rows[0].cells[1].innerHTML alert(val) i++ } } </script> </head> <body> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Уровень жизни</span> </td> <td class="if_ch_val ">18.4</td> </tr> </tbody> </table> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Уровень жизни</span> </td> <td class="if_ch_val ">20.5</td> </tr> </tbody> </table> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Уровень маны</span> </td> <td class="if_ch_val ">8.4</td> </tr> </tbody> </table> <button onclick='Get()'>Get</button> </body> </html> Нужно выбрать из трех таблиц только 2(или 3\4\5 если они есть) которые называются как "Уровень жизни" далее так же с "Уровень маны" и т.д а в исходном виде оно берет сразу все значения из-за того что у всех одинаковый класс "if_ch" а сделать разные классы для различных переменных возможности нет.. ps это если я правильно понял что alert(val[0]) выдаст 1, тоесть каждая цифра записана отдельно... |
Цитата:
|
Цитата:
Дотумкать как проверять именно по значениям мне не удалось:D в общем сделал так: <!DOCTYPE html> <html> <head> <title>test</title> <style type="text/css"> </style> <script type="text/javascript"> function Get() { var ot=document.getElementsByTagName('table') var i=2 var s=1 var val while (ot[i]) { if (ot[i].className!='if_ch') { i++ continue } val=ot[i].rows[0].cells[1].innerHTML+ot[s].rows[0].cells[1].innerHTML alert(val) i++ } } </script> </head> <body> <table> <tbody> <tr> <td> <span>Test</span> </td> <td>1020</td> </tr> </tbody> </table> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">Уровень жизни</span> </td> <td class="if_ch_val ">2.4</td> </tr> </tbody> </table> <table class="if_ch"> <tbody> <tr> <td class="if_ch_name "> <span title="">tes</span> </td> <td class="if_ch_val ">12.4</td> </tr> </tbody> </table> <button onclick='Get()'>Get</button> </body> </html> В общем если ставить так val=ot[i].rows[0].cells[1].innerHTML*ot[s].rows[0].cells[1].innerHTML то значения перемножаются, если "+" то складываются но не математическим действием а просто выводит оба значения.. В общем то нубский вопрос, сегодня пока гуглил на решение моей проблемы видел где то писали про знак плюс в javascript, не подскажете где можно про это почитать? А то что то сейчас уже не могу найти..:-? |
Цитата:
Цитата:
var a='1' var b='2' alert(a+b) a=+a b=+b alert(a+b) |
Цитата:
А сейчас вот приспичило сделать для себя такую вот фиговину и как оказалось гугл тут бессилен :lol: Цитата:
val=(+ot[i].rows[0].cells[1].innerHTML+ +ot[s].rows[0].cells[1].innerHTML) всё складывает вроде как хорошо... В общем такой поиск по странице решил пока отложить, все же что бы добиться нужного мне результата нужно прописывать много условий а т.к в них я совсем ничего не понимаю врятли что то получится (готовый скрипт за меня каждый раз никто писать не будет, будем изучать:) ) На данный момент решил для вывода нужных мне элементов использовать xpatch получился такой скрипт function Get() { var headings = document.evaluate("//span[text()='Броня']/../../td[2]", document, null, XPathResult.ANY_TYPE, null ); var thisHeading = headings.iterateNext(); var alertText = "Прочность доп. брони:\n" while (thisHeading) { alertText += thisHeading.textContent + "\n" thisHeading = headings.iterateNext(); } document.getElementById('result').innerHTML = alertText; } таким прекрасно находится любой нужный элемент, но одна проблема. для построения страницы я использую множество iframe, как в javasqript xpatch'у указать фрейм для поиска? в php нашел как а в javascript пока что то никак.. |
Часовой пояс GMT +3, время: 03:18. |