我正在尝试将相同的数学变化应用于6个差异跨度中的6个不同数字,这些差异跨度都共享同一个类。使用此HTML:
<span class="PageText_L483n">$8.00</span>
<span class="PageText_L483n">$9.00</span>
<span class="PageText_L483n">$10.00</span>
<span class="PageText_L483n">$11.00</span>
<span class="PageText_L483n">$12.00</span>
<span class="PageText_L483n">$13.00</span>
我最初有这个JS:
$(function() {
var price = parseFloat($('.PageText_L483n').text().substr(1));
var discount = price * 0.2;
var newPrice = price - discount;
var newText = '<div>$' + price + '</div> $' + newPrice;
$('.PageText_L483n').html(newText);
$('.PageText_L483n div').css("text-decoration", "line-through");
});
但这只是用第一个跨度的信息替换所有跨度。所以我试着在这个JS中使用数组:
$(function() {
var prices = [];
for (var i = 0; i < 6; i++) {
prices[i] = parseFloat($('.PageText_L483n:nth-of-type(i+1)').text().trim().substr(1));
}
for (var j = 0; j < 6; j++) {
var discount = prices[j] * 0.2;
var newPrice = prices[j] - discount;
var newText = '<div>$' + prices[j] + '</div> $' + newPrice;
$('.PageText_L483n').html(newText);
$('.PageText_L483n div').css("text-decoration", "line-through");
}
});
但现在它什么也没做。有人能指出我正确的方向吗?
JSFiddle:http://jsfiddle.net/vSePd/
答案 0 :(得分:2)
<强> Fiddle 强>
由于您正在使用jQuery,因此您可以轻松地遍历元素本身:
$(function() {
$('span.PageText_L483n').each(function() {
var span = $(this);
var price = parseFloat(span.text().substring(1));
var discount = price * 0.2;
var newPrice = price - discount;
span.html('<div style=text-decoration:line-through>$' + price.toFixed(2) + '</div> $' + newPrice.toFixed(2));
});
});
如果您不想因任何原因使用jQuery:
$(function() {
var spans = document.querySelectorAll('span.PageText_L483n');
for ( var i = 0, l = spans.length; i < l; ++i ) {
var price = parseFloat(spans[i].textContent.substring(1));
var discount = price * 0.2;
var newPrice = price - discount;
spans[i].innerHTML = '<div style=text-decoration:line-through>$' + price.toFixed(2) + '</div> $' + newPrice.toFixed(2);
}
});
答案 1 :(得分:1)
正如kalley所说,jQuery的.each()
将是一个适合在对一组与选择器匹配的元素上执行操作时使用的函数。
$('.PageText_L483n')
破坏您的代码的原因是它总是选择span
的所有。因此,例如,当使用$('.PageText_L483n').html(newText)
时,html()
函数将应用于与选择器匹配的所有元素。
使用each()
时,您可以访问$(this)
,它基本上指向函数当前正在循环的所有匹配元素中的单个元素,这允许您执行单独的每次运行期间的行动。
答案 2 :(得分:0)