我想在administrate-price
课程的价格中移除最后5个字符。这只能在我的控制台中看到的1个元素上工作。
$(".administrate-price").each(function(i, object) {
thePrice = $(this).text();
});
thePrice = thePrice.substr(0, thePrice.length - 5);
如何让所有administrate-price
元素都能正常运行?
答案 0 :(得分:3)
到each
次迭代完成时,thePrice
被设置为最后一个元素的文本。在迭代本身内执行substring
操作
$(".administrate-price").each(function(i, object) {
var thePrice = $(this).text();
$(this).text(thePrice.substr(0, thePrice.length-5));
});
答案 1 :(得分:2)
您需要更好地了解构建块。
jQuery .each(fn)
方法可用于任何jQuery集合,并使用元素的数字索引将函数fn
同步应用于集合的每个元素。
您的代码因此说:
administrate-price
类的所有元素。thePrice
设置为元素的内部文本。thePrice
设置为缺少最后5个字符的子字符串。步骤2反复破坏您正在设置全局变量的值,以便仅保留最后一个。你自己给的代码片段本身没有别的东西;它只是破坏了一个全局变量,您稍后可以使用window.thePrice
(在浏览器上)看到它。
相反,你可能想要这个:
administrate-price
类的所有元素。因此,功能(封装步骤2)必须是:
function () {
var el = $(this);
el.text( // setter
el.text() // getter
.slice(0, -5) // truncation
);
}
这定义了一个保存el
的局部变量$(this)
,以便jQuery不需要构建两个单元素集合,而只需重用一个作为getter和setter;你也可以根据需要编写单行function(){$(this).text($(this).text().slice(0, -5))}
,而不存储这个变量。
答案 2 :(得分:1)
请注意,在循环完成后,您将在循环外部设置<{1}}值 。这意味着它只能看到最终迭代的价值。试试这个:
thePrice
同样值得注意的是,在这个实例中你不需要使用$(".administrate-price").each(function(i, object) {
thePrice = $(this).text().substr(0, thePrice.length - 5);
$(this).text(thePrice);
});
,因为你可以为each()
提供一个函数来单独对每个元素执行。试试这个:
text()