[英]Can not change attribute value with jQuery
我有以下要素:
<span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="VariableDataList[0].VariableDataForLevel[1].Value"></span>
我想替換data-valmsg-for
的值, data-valmsg-for
更改.Value
之前的數字。 為此,我使用此函數( latestIdNumber
和newIdNumber
是我在函數開始時計算的值,但可以想象一下, latestIdNumber
為1且newIdNumber
為2):
clone.find("span[data-valmsg-for$='Value']").map(function () {
var reName = '[' + latestIdNumber + '].Value';
$(this).attr('data-valmsg-for').replace(reName, '[' + newIdNumber + '].Value');
});
reName
值為[1].Value
。 我想用[2].Value
替換data-valmsg-for
。 之后,我將在data-valmsg-for
值data-valmsg-for="VariableDataList[0].VariableDataForLevel[2].Value
。
我已經用Visual Studio調試了它,它在查找中停止,但是屬性的值沒有改變。
我知道屬性值不會更改,因為我已經打開了Internet Explorer調試器,但是看不到新值。
我已經嘗試過相同的方法,更改輸入字段的id
和name
並replace
功能可以完美地工作。
如何替換該屬性的值?
首先,您應該使用each()
來遍歷元素集合。 map()
旨在從該集合創建一個數組,盡管在這種情況下,如果您正確使用attr()
也不是必需的。
代碼的問題是因為您沒有調用attr()
的設置方法。 取而代之的是獲取值,執行替換,但對結果不執行任何操作。
為了解決這個問題,您可以為attr()
方法提供一個函數,該函數對集合中元素的每個實例執行邏輯。 嘗試這個:
var latestIdNumber = '1'; var newIdNumber = '999'; var reName = '[' + latestIdNumber + '].Value'; $("span[data-valmsg-for$='Value']").attr('data-valmsg-for', function(i, v) { return v.replace(reName, '[' + newIdNumber + '].Value'); }); // to show it worked: $("span[data-valmsg-for$='Value']").each(function() { console.log($(this).attr('data-valmsg-for')); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="VariableDataList[0].VariableDataForLevel[1].Value">Foo</span> <span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="VariableDataList[0].VariableDataForLevel[1].Value">Bar</span>
還要注意,您應該真正使用data()
方法來處理data-*
屬性。 需要說明的是data()
不會更新DOM,因此,如果您需要該行為,則需要繼續使用attr()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.