2016-05-17 69 views
5

我有下面的一段HTML和關聯的jQuery。 html功能工作正常,但data功能根本不影響HTML,我不能在我的生活中弄明白,瀏覽器根本沒有錯誤。jQuery,數據()不更新數據屬性

HTML

<span id="usernameStatus" data-valid="0">x</span> 

jQuery的

data通過AJAX調用返回,就永遠只能是truefalse

function validUsername(data) 
{   
    if (data === 'true') { 
     $("#usernameStatus").html("y").data("valid", 1); 
    } else { 
     $("#usernameStatus").html("x").data("valid", 0); 
    } 
} 
+1

[可能的重複。](http://stackoverflow.com/q/8707226/6188402) –

+0

很確定數據函數沒有按照您預期的那樣工作。林非常確定jquery複製/ ref /數據屬性的東西,所以你改變,而不是attr。如果您在更改後查看相同元素的.data,則會看到它已更改,但html attr將保持不變。 – Spaceman

+1

你可以在這裏找到一個很好的解釋:http://stackoverflow.com/questions/36663690/jquery-prop-returns-undefined-while-attr-works-as-expected-for-data –

回答

3

每jQuery的API文檔

的。數據()方法允許我們任何類型的DOM元素的數據附加的方式,是從循環引用安全並因此從存儲器泄漏。

.data()方法不會修改現有的DOM節點,但將僅通過的$selector.data()呼叫是檢索。您的DOM元素不會更改,只是附加到它們的數據。

0

你可以做這樣的事情:

$("#usernameStatus").attr('data-valid','1'); 

相反伊辛的.html()返回元素的內部內容。

0

.data()方法不會修改DOM元素的屬性。但是,數據仍然通過保存。 $selector.data(key, value);,可以通過檢索。 $selector.data(key);

爲了向DOM元素添加屬性,您可能需要使用.attr() method。通過.attr(),可以通過一個元素附加一個屬性。 $selector.attr(key, value);,可以通過檢索。 $selector.attr(key);

validUsername(data) {  
     if (data === 'true') { 
      $("#usernameStatus").html("y").attr("data-valid", 1); 
     } else { 
      $("#usernameStatus").html("x").attr("data-valid", 0); 
     } 
    } 

JSFiddle example

對使用​​.attr()代替.data()的優點之一是找到與經由一個屬性(以及值)的所有元素的能力。 $('[key="value"]')選擇器。