Jquery .each()仅适用于1个元素

时间:2015-11-02 16:07:56

标签: jquery each

我想在administrate-price课程的价格中移除最后5个字符。这只能在我的控制台中看到的1个元素上工作。

$(".administrate-price").each(function(i, object) {
    thePrice = $(this).text();
});
thePrice = thePrice.substr(0, thePrice.length - 5);

如何让所有administrate-price元素都能正常运行?

3 个答案:

答案 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同步应用于集合的每个元素。

您的代码因此说:

  1. 获取administrate-price类的所有元素。
  2. 对于每个人:将全局变量thePrice设置为元素的内部文本。
  3. 循环完成后:将全局变量thePrice设置为缺少最后5个字符的子字符串。
  4. 步骤2反复破坏您正在设置全局变量的值,以便仅保留最后一个。你自己给的代码片段本身没有别的东西;它只是破坏了一个全局变量,您稍后可以使用window.thePrice(在浏览器上)看到它。

    相反,你可能想要这个:

    1. 获取administrate-price类的所有元素。
    2. 对于他们每个人:
      • 获取当前文字。
      • 截断该文字。
      • 将当前文本设置为上述截断。
    3. 因此,功能(封装步骤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()