2015-11-02 116 views
0

我想刪除administrate-price類中價格上的最後5個字符。這隻能在我的控制檯中看到的1個元素上工作。Jquery .each()僅適用於1個元素

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

我該如何爲所有administrate-price元素做這項工作?

+2

請發佈完整的代碼示例。這裏我們至少需要HTML。另外,你發佈的最後一行不應該在你的每個函數中嗎? – j08691

+0

您正在設置循環外的'thePrice' * –

+0

您每次都重新分配變量。它將只包含最後一個值。所以如果你有3,那麼'價格'只會是第三個對象的文本。 – Twisty

回答

3

each迭代完成時,thePrice被設置爲最後一個元素的文本。迭代本身

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

注意你設置thePrice循環外,循環完成後的執行substring操作。這意味着它只會看到最終迭代的價值。試試這個:

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

另外值得一提的是,你不需要在這種情況下使用each(),你可以到text()提供的功能要針對每個元素單獨執行。試試這個:

$(".administrate-price").text(function(i, t) { 
    return t.substr(0, t.length - 5); 
}); 
+0

哦,是的,忘記了回調方法! :) – AmmarCSE

+0

這是非常感謝! –

+0

沒問題,很高興幫助。不要忘記接受答案。 –

1

你需要更好地理解你的構建塊。

jQuery .each(fn)方法適用於任何jQuery集合,並使用元素的數字索引同步地將函數fn應用於集合中的每個元素。因此

您的代碼表示:

  1. 獲取與administrate-price類的所有元素。
  2. 對於它們中的每一個:將全局變量thePrice設置爲元素的內部文本。
  3. 循環完成後:將全局變量thePrice設置爲缺少最後5個字符的子字符串。

第2步反覆地將您正在設置全局變量的值關閉,以便只保留最後一個值。本身你所提供的代碼片段不會做任何其他的事情;它只是摧毀了一個全局變量,你可以在以後看到window.thePrice(在瀏覽器上)。

相反,你可能想要這個:

  1. 獲取與administrate-price類的所有元素。
  2. 對於它們中的每一個:
    • 獲取當前文本。
    • 截斷該文本。
    • 將當前文本設置爲上述截斷。

函數(封裝步驟2)因此必須是:

function() { 
    var el = $(this); 
    el.text(// setter 
     el.text() // getter 
      .slice(0, -5) // truncation 
    ); 
} 

這定義了一個局部變量el節省了$(this)所以jQuery不會需要建立兩個一元件收集,但只是重新使用一個作爲吸氣和二傳手;如果你願意,你也可以直接寫一行function(){$(this).text($(this).text().slice(0, -5))},不用存儲這個變量。

相關問題