Просмотр полной версии : Помогите вывести и посчитать значения ячеек в таблицах
Весь код страницы во вложенном файле.
в результате работы скрипта на страницу выводятся таблицы такого вида
<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 = с;
}
рабочий код можно посмотреть тут (http://odyssey-mist.ru/upgrades.html)
обишь есть два дива нужно сложить значение ячеек к примеру с Прочность доп. брони
В твоём примере такой ДИВ один... :)
У табличек с данными всегда один класс - 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, тоесть каждая цифра записана отдельно...
Нужно выбрать из трех таблиц только 2(или 3\4\5 если они есть) которые называются как "Уровень жизни"
Таки начинай читать другие ячейки... Проверяй их значения... Это и называется "писать программу". :D
Проверяй их значения... Это и называется "писать программу". :D
в javascript я не силен потому задаю глупые вопросы):-?
Дотумкать как проверять именно по значениям мне не удалось: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, не подскажете где можно про это почитать? А то что то сейчас уже не могу найти..:-?
в javascript я не силен
А в чём силён?
если "+" то складываются но не математическим действием а просто выводит оба значения..
Как вариант...
var a='1'
var b='2'
alert(a+b)
a=+a
b=+b
alert(a+b)
А в чём силён?
Гугло поиске например) Шучу конечно..) Просто раньше мне вполне хватало банального html+css+copipast скриптов с гугла...
А сейчас вот приспичило сделать для себя такую вот фиговину и как оказалось гугл тут бессилен :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 пока что то никак..
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot