2017-02-17 80 views
0

我试图选择按类“ProductPrice”列出的价格,并从$ 59中减去它以显示免费送货邮件,但无法获得选择产品价格。我哪里错了?在div标签中选择一个数字并从59中减去它并将结果显示为文字

<div><em class="ProductPrice">$16.95</em></div> 


<script> 
var cart = document.getElementByClassName("ProductPrice").replace('$', ''); 
var test = 59 - cart; 

document.write('<div>Add $' + cart + 'to your cart to get free shipping.</div>'); 

</script> 

回答

0

有几件事要牢记。

  • 您应该使用getElementsByClassName而不是getElementByClassName
  • 使用括号表示法访问特定元素。要获取第一个元素,请附加[0]
  • 替换前请致电innerHTML

<div><em class="ProductPrice">$16.95</em></div> 
 

 

 
<script> 
 
var cart = document.getElementsByClassName("ProductPrice")[0].innerHTML.replace('$', ''); 
 
var promotion = 59 - cart; 
 

 
document.write('<div>Add $' + promotion + ' to your cart to get free shipping.</div>'); 
 

 
</script>

编辑:它可能更好地使用textContent,而不是innerHTML

+0

我假设你不必在这里解析,因为它是int - 字符串,所以字符串被autoparsed? – Shilly

+0

正确,因为JS类型转换 –

+0

无论如何,这是否是最好的做法,因为相反的'var promotion = cart + 59'会不正确?或者我们可以假设每个人都知道吗? – Shilly

0

你的答案是:

var cart = parseFloat(document.getElementsByClassName("ProductPrice")[0].innerHTML); 
var test = 59 - cart; 
document.write('<div>Add $' + cart + 'to your cart to get free shipping.</div>'); 

parseFloat发生在一个字符串值作为参数,并把它转换成从第一号开始,持续,直到它到达一个非数字的浮动。例如,您的$16.95(字符串)将变成16.95(数字)。另外,getElementsByClassName返回一个包含类名为"ProductPrice"的所有元素的数组,因此您必须引用该数组中的第一个索引。希望这可以帮助!

+1

parseInt将16.95变为16.使用parseFloat。 – Shilly

+0

很棒! 'parseFloat'与小数位一起工作,这对于货币价值是理想的。修正了我的错误。 –

+0

为了记录,当代表金钱时,你不应该使用浮动工具,因为每个分数和浮动乘法或除法在JS中都不是精确的。所以最好的方法是用100乘以100,然后parseInt,再将最终结果除以100,这样所有的计算都以整数完成。 – Shilly

1

您正在选择类别为ProductPrice的DOM元素,然后尝试使用其上的replace函数。但问题是替换函数是String类中的一种方法。

所以,你应该首先得到包含在元素中的文本,这是字符串值:

document.getElementsByClassName('ProductPrice')[0].textContent.replace('$', '') 

您也可以使用innerHTML属性,它会让你的HTML代码,而不是文本值。

另外,正如你所看到的,函数是getElementsByClassName,它返回一个包含这个类的所有元素的数组。

最后,您可能希望在Number.toFixed方法的帮助下,在得到的test变量中显示正确的小数位数。

编辑:Javascript应该足够聪明,可以在执行数学操作之前将字符串强制转换为Number,但如果您想确认,则可以使用parseFloat(string)获取字符串的浮点数值。

相关问题