Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как получить содержание теге, без дочерних тегов ? :) (https://javascript.ru/forum/misc/38901-kak-poluchit-soderzhanie-tege-bez-dochernikh-tegov.html)

Lutidza 07.06.2013 08:06

Как получить содержание теге, без дочерних тегов ? :)
 
Как получить содержание тега, без дочерних тегов ?*

Здравствуйте.

Помогите, пожалуйста, решить простую задачу.

Есть следующий Html:
<span class="productPrice">
  <span itemprop="price">
      550  
      <span class="currency">руб</span>
  </span>
</span>



Задача получить значение цены без валюты, но у меня это не выходит :blink: .
Ни как не могу избавиться от пресловутого <span class="currency">руб</span>

Делаю так:
FullPrice = jQuery(".productPrice>span").html();
FullPrice = jQuery(FullPrice).remove('.currency');


Но мне возвращает как раз то значение которое я хочу удалить :)


Как из выше описанного HTML кода получить только число "550" ?

Большое, спасибо.

ksa 07.06.2013 09:03

Цитата:

Сообщение от Lutidza
получить значение цены без валюты

Как вариант...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(document).ready(function (){
	var txt=$('.productPrice > span').text();
	txt=txt.replace(/[^0-9]/gm,'');
	alert('>'+txt+'<')
});
</script>
</head>
<body>
<span class="productPrice">
	<span itemprop="price">
		550  
		<span class="currency">руб</span>
	</span>
</span>
</body>
</html>

ruslan_mart 07.06.2013 15:10

Можно так:
alert($('productPrice > span').html().split('<')[0]);

danik.js 07.06.2013 15:36

<span class="productPrice">
  <span itemprop="price">
      550 
      <span class="currency">руб</span>
  </span>
</span>
<script>
var text = document.querySelector('.productPrice > span').firstChild.textContent;
alert(text);
</script>

danik.js 07.06.2013 15:39

<span class="productPrice">
  <span itemprop="price">
      550
      <span class="currency">руб</span>
  </span>
</span>
<script>
var price = document.querySelector('.productPrice > span')
alert(parseInt(price.textContent || price.innerText))
</script>

Lutidza 07.06.2013 18:23

Спасибо, большое.
Взял последний вариант, хотя и пример с регулярками тоже вполне походит.

Вот только я не понял, чем отличается:
document.querySelector('.productPrice > span')

От:
$('.productPrice > span')

И почему последний не работает в этой конструкции:
price = $('.productPrice > span')
alert(parseInt(price.textContent || price.innerText));

danik.js 07.06.2013 19:10

Отличие в том что $ - это функция из библиотеки jQuery, и она возвращает не элемент, а массивоподобный объект-коллекцию, у которой нет конечно свойств элемента. Вместо этого нужно price.text() использовать.
querySelector нету в допотопных ИЕ, а в IE8 не работает с css3 селекторами.

Lutidza 07.06.2013 21:51

Ок. Понял. Спасибо.

fb_max 13.10.2014 04:30

Жаль вас всех разочаровывать но

var price = document.querySelector('.productPrice > span');
alert(parseInt(price.textContent || price.innerText));

выведет оба текста из двух span !

Вот решение : (результат - текст только в данном елементе , без дочерних)
function getInnerText(DOMelement)
{
    var text = '';
	childrenList = DOMelement.childNodes;
	for (var i=0; i<childrenList.length; i++)
       if (childrenList.item(i).nodeType==3)
		  text = text + childrenList.item(i).nodeValue;
	return text;
}
var price = getInnerText(document.querySelector('.productPrice > span'));

MallSerg 13.10.2014 07:18

delete =)


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