簡體   English   中英

無法使用jQuery更改屬性值

[英]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之前的數字。 為此,我使用此函數( latestIdNumbernewIdNumber是我在函數開始時計算的值,但可以想象一下, 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-fordata-valmsg-for="VariableDataList[0].VariableDataForLevel[2].Value

我已經用Visual Studio調試了它,它在查找中停止,但是屬性的值沒有改變。

我知道屬性值不會更改,因為我已經打開了Internet Explorer調試器,但是看不到新值。

我已經嘗試過相同的方法,更改輸入字段的idnamereplace功能可以完美地工作。

如何替換該屬性的值?

首先,您應該使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM