Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   перемножить 2 числа а потом сложить js (https://javascript.ru/forum/misc/39275-peremnozhit-2-chisla-potom-slozhit-js.html)

djonA 23.06.2013 16:14

перемножить 2 числа а потом сложить js
 
подскажите необходимо перемножить некоторые числа, а потом сложить и вывести сумму в span.

Со сложением и выводом в span разобрался делаю вот так:
<table>
<tr>
<td class="sumItg">1</td>
<td class="sumItg">2</td>
<td class="sumItg">3</td>
</tr>
</table>


<script type="text/javascript">
	var sumItg=0, td=document.getElementsByTagName('td'), i=td.length;
	while(i--) {if(td[i].className=='sumItg') sumItg+=+td[i].innerHTML}
	document.getElementById('parent').innerHTML = sumItg
	</script>


<span id="parent"></span>


А необходимо еще добавить сюда умножение:
Т.е в <td> добавить еще умножение.
Т.е вот так:
<table>
<tr>
<td class="sumItg">1</td><td class="test">2</td>
<td class="sumItg">2</td><td class="test">2</td>
<td class="sumItg">3</td><td class="test">2</td>
</tr>
</table>


Вначале перемножить sumItg и test, а потом просумировать и вывести в span id="parent"

bes 23.06.2013 17:04

и что у тебя не получается?

djonA 23.06.2013 17:06

не получается добавить умножение, т.е в начале умножение а потом уже сложение.

bes 23.06.2013 17:07

собери полный тестовый пример с возможностью запуска [html run]

djonA 23.06.2013 17:28

<table><tr> 
<td class="sumItg">1</td> 
 <td class="sumItg">2</td> 
 <td class="sumItg">3</td> 
 </tr></table> 
<script type="text/javascript"> 
 var sumItg=0, td=document.getElementsByTagName('td'), i=td.length; 
 while(i--) {if(td[i].className=='sumItg') sumItg+=+td[i].innerHTML} 
alert(sumItg) 
</script>


Вот так складываю.

А мне надо добавить еще элемент умножение и вначале умножить на него и потом сложить.

<table><tr> 
<td class="sumItg">1</td> <td class="test">2</td> 
 <td class="sumItg">2</td> <td class="test">3</td> 
 <td class="sumItg">3</td> <td class="test">2</td> 
 </tr></table>


не могу дописать js скрипт что бы вначале перемножал а потом складывал?

bes 23.06.2013 17:38

ну, отформатировал за тебя, чё надо-то
<table> 
	<tr> 
		<td class="sumItg">1</td> 
		<td class="sumItg">2</td> 
		<td class="sumItg">3</td> 
	</tr> 
</table> 
<span id="parent"></span>
 <script> 
window.onload = function () {
	var sumItg = 0;
	var td = document.getElementsByTagName('td');
	var i = td.length; 
	while(i--) {
		if(td[i].className == 'sumItg') { 
			sumItg += +td[i].innerHTML;
		}
		document.getElementById('parent').innerHTML = sumItg;
	}
}
</script>

djonA 23.06.2013 17:43

надо добавить еще <td> и умножить на него, что бы было вот так:

<table><tr>  
<td class="sumItg">1</td> <td class="test">2</td>  
 <td class="sumItg">2</td> <td class="test">3</td>  
 <td class="sumItg">3</td> <td class="test">2</td>  
</tr></table>


вначале перемножить sumItg на test, а потом все сложить

bes 23.06.2013 17:47

собери полный тестовый пример с возможностью запуска [html run]

djonA 23.06.2013 17:50

<table>  
     <tr>  
         <td class="sumItg">1</td>  <td class="test">2</td>
         <td class="sumItg">2</td>  <td class="test">2</td>
         <td class="sumItg">3</td>  <td class="test">2</td>
     </tr>  
 </table>  
 <span id="parent"></span> 

  <script>  
 window.onload = function () { 
     var sumItg = 0; 
     var td = document.getElementsByTagName('td'); 
     var i = td.length;  
     while(i--) { 
        if(td[i].className == 'sumItg') {  
             sumItg += +td[i].innerHTML; 
} 
         document.getElementById('parent').innerHTML = sumItg; 
     } 
 } 
</script>


только не могу изменить js что бы оно вначале перемножало sumItg на test а потом результат складывало и выводило рез-тат в id="parent"

bes 23.06.2013 17:59

<table> 
	<tr> 
		<td class="sumItg">1</td>
		<td class="test">2</td>
		<td class="sumItg">2</td> 
		<td class="test">3</td>
		<td class="sumItg">3</td> 
		<td class="test">4</td>
	</tr> 
</table> 
<span id="parent"></span>
<script> 
window.onload = function () {
	var sumItg = 0;
	var td = document.getElementsByTagName('td');
	var i = td.length; 
	while(i--) {
		if(td[i].className == 'sumItg') { 
			sumItg += td[i].innerHTML * td[i].nextElementSibling.innerHTML;
		}
	}
	document.getElementById('parent').innerHTML = sumItg;
}
</script>

не забудь обеспечить кроссбраузерность nextElementSibling

djonA 23.06.2013 18:06

Спасибо огромное, а подскажите как обеспечить кроссбраузерность nextElementSibling?

bes 23.06.2013 18:08

Цитата:

Сообщение от djonA (Сообщение 257998)
Спасибо огромное, а подскажите как обеспечить кроссбраузерность nextElementSibling?

также как слова в гугле забиваются

djonA 23.06.2013 18:21

так и не нашел как решить проблему nextElementSibling в ie 8.

Читал читал но так и не нашел как обеспечивать кроссбраузерность

bes 23.06.2013 19:02

а как обычно всё делают - проверяют на существование
if (elem.nextElementSibling) ....
else ...

почитай про узлы
http://learn.javascript.ru/basic-dom-node-properties

конкретно для таблиц и nextSibling подойдёт

bes 23.06.2013 19:16

ладно, не читай, выходной :D
<div>
	<span>1</span>
	<span>2</span>
</div>
<span id="parent"></span>
<script> 
function nextElementSibling(elem) {
	if (elem.nextElementSibling) {
		return elem.nextElementSibling;
	} else {
		while (elem.nextSibling) {
			if (elem.nextSibling.nodeType == 1) {
				return elem.nextSibling;
			} else {
				elem = elem.nextSibling;
			}
		}
	}
	return null;
}
window.onload = function () {
	var spans = document.getElementsByTagName('span');
	alert(nextElementSibling(spans[0]).innerHTML);
	alert(nextElementSibling(spans[1]));
}
</script>

Olggga 24.06.2013 21:27

А подскажите как соединить вот это и вот это:

<table>   
     <tr>   
         <td class="sumItg">1</td>  
         <td class="test">2</td>  
         <td class="sumItg">2</td>   
         <td class="test">3</td>  
         <td class="sumItg">3</td>   
         <td class="test">4</td>  
     </tr>   
 </table>   
 <span id="parent"></span>  
 <script>   
 window.onload = function () {  
     var sumItg = 0;  
     var td = document.getElementsByTagName('td');  
     var i = td.length;   
     while(i--) {  
         if(td[i].className == 'sumItg') {   
             sumItg += td[i].innerHTML * td[i].nextElementSibling.innerHTML;  
        }  
     }  
     document.getElementById('parent').innerHTML = sumItg;  
 }  
 </script>





<div>  
   <span>1</span>  
    <span>2</span>  
</div>  
 <span id="parent"></span>  
  <script>   
 function nextElementSibling(elem) {  
     if (elem.nextElementSibling) {  
         return elem.nextElementSibling;  
    } else {  
         while (elem.nextSibling) {  
             if (elem.nextSibling.nodeType == 1) {  
                return elem.nextSibling;  
            } else {  
                 elem = elem.nextSibling;  
             }  
         }  
     }  
     return null;  
}  
 window.onload = function () {  
     var spans = document.getElementsByTagName('span');  
     alert(nextElementSibling(spans[0]).innerHTML);  
     alert(nextElementSibling(spans[1]));  
 }  
 </script>



что 1 код был кросбраузерный и работал в ie 7-8, а то у меня что то не получается

Olggga 24.06.2013 21:31

пробую так не работает:

<table>   
     <tr>   
        <td class="sumItg">1</td>  
         <td class="test">2</td>  
        <td class="sumItg">2</td>   
         <td class="test">3</td>  
         <td class="sumItg">3</td>   
         <td class="test">4</td>  
    </tr>   
 </table>   
 <span id="parent"></span>  



<script>

 function nextElementSibling(elem) {  
     if (elem.nextElementSibling) {  
         return elem.nextElementSibling;  
    } else {  
         while (elem.nextSibling) {  
             if (elem.nextSibling.nodeType == 1) {  
                return elem.nextSibling;  
            } else {  
                 elem = elem.nextSibling;  
             }  
         }  
     }  
     return null;  
} 

	 window.onload = function () { 
   var sumItg = 0; 
    var td = document.getElementsByTagName('td'); 
   var i = td.length;  
    while(i--) { 
       if(td[i].className == 'sumItg') {  
             sumItg += +td[i].innerHTML * td[i].nextElementSibling.innerHTML; 
         } 
     } 
     document.getElementById('parent').innerHTML = sumItg; 
 } 
 </script>

skrudjmakdak 24.06.2013 21:57

вот так попробуйте:
<html>
	<body>
<table>   
     <tr>   
        <td class="sumItg">1</td>  
         <td class="test">2</td>  
        <td class="sumItg">2</td>   
         <td class="test">3</td>  
         <td class="sumItg">3</td>   
         <td class="test">4</td>  
    </tr>   
 </table>   
 <span id="parent"></span>  



<script>

function nextElementSibling(elem)
	{  
	if (elem.nextElementSibling)  
		return elem.nextElementSibling;  
 
	while (elem.nextSibling)
		{
		if (elem.nextSibling.nodeType == 1)
			return elem.nextSibling;
		elem = elem.nextSibling;
		}

	return null;  
	}

window.onload = function ()
	{ 
	var sumItg = 0; 
	var td = document.getElementsByTagName('td'); 
	var i = td.length - 1;  
	while(i--)
		{ 
		if(td[i].className == 'sumItg')
			sumItg += parseInt(td[i].innerHTML) * parseInt(nextElementSibling(td[i]).innerHTML);
		} 
	document.getElementById('parent').innerHTML = sumItg; 
	}
 </script>


	</body>
</html>


ничего сложного нет. думайте..

bes 24.06.2013 21:58

Цитата:

Сообщение от Olggga
пробую так не работает:

djonA, это ты?

Olggga 24.06.2013 22:19

Да я с дрйгого компа зашел.
Спасибо большое всем заработало!

bes 24.06.2013 22:29

Цитата:

Сообщение от Olggga
Да я с дрйгого компа зашел.

многозначный ник


Часовой пояс GMT +3, время: 06:41.