2012-09-20 66 views
10

似乎無法得到這個工作...使用jQuery從HTML中刪除數據屬性

我有一個隱藏某些鏈接的頁面。當DOM被加載時,我使用jQuery來切換這些元素。這是通過使用一個數據屬性,像這樣驅動:

<div class="d_btn" data-usr='48'> 
    <div class="hidden_button"> 

然後,我的代碼:

$.each($(".d_btn"), function() { 
    var btn = $(this).data('usr'); 
    if (btn == '48'){  
    $(this).children('.hidden_button').toggle(); 
    } 

的所有作品上面按計劃進行。問題是,我正試圖在if語句被評估後從類.d_btn中刪除數據-usr。我試過以下,並沒有什麼作品(即在頁面加載後,源仍顯示數據USR屬性:

$(this).removeAttr("data-usr"); 

$(this).removeData("usr"); 

我一直工作在此的幾個小時,現在和。 ..nothing!幫助是非常感謝!

UPDATE

我嘗試了數據屬性設置爲空字符串的很好的建議,但我仍然沒有得到想要的結果。

到進一步解釋一下,我試圖刪除屬性的原因是,當一個Ajax響應向頁面添加另一個項目時,以前添加的項目已經具有顯示或隱藏的按鈕。在AJAX響應之後,我一旦加載DOM就調用相同的函數。

目前,在一些通過AJAX添加,就會切換所有按鈕(顯示出被隱藏,反之亦然的人。)呃......

我也完全願意嘗試替代我的方法。謝謝!

UPDATE

好,燈泡剛剛閃過,我能夠做我想做的事情只要使用.show()而不是.toggle()

無論如何,我仍然希望找到這個問題的答案,因爲每當添加了一些內容時,頁面可能會檢查數以百計的項目 - 這看起來非常低效(即使對於計算機,哈哈哈)。

回答

7

更改DOM不會影響源。它會影響DOM,您可以使用Inspector/Developer Tools進行查看。右鍵單擊=>查看源代碼將爲您提供頁面的原始源代碼,而不是由JavaScript修改的實際當前源代碼。

+1

+1點是這樣的。 http://jsfiddle.net/VVbFG/ – undefined

+0

謝謝 - 這真的很有幫助!我已經更新了我的帖子,提供更多信息。 –

5

爲什麼不設置該值爲隨機值或空變量能夠代替如果removeAttr不起作用..

$(this).attr("data-usr" , ''); 

$(this).prop("data-usr" , ''); 
+0

謝謝 - 我已經更新了我原來的職位與一些進一步的解釋...... –

+0

但是,當數據USR是空的,我想這不會碰到,如果循環的權利..因此,對於特定的div按鈕狀態不會被切換..如果我在想什麼是錯誤的,你可以構造一個小提琴嗎? –

+0

這正是我的想法,但它不是那樣工作的。未定義創造了小提琴在他上面的響應:jsfiddle.net/VVbFG –

1

將其設置爲空字符串:

$(this).attr("data-usr", ""); 

我第二什麼Kolink說:檢查DOM,而不是源。 (Chrome:Ctrl + Shift + i)。

+0

謝謝 - 我已經更新了我原來的職位與一些進一步的解釋... –

1

正如其他人所說。檢查來源只會顯示網頁的原始未經編輯的來源。你需要做的是使用開發人員工具檢查DOM。

我剛剛檢查了Chrome的督察一切對的jsfiddle here和屬性肯定是被刪除以及數據。

+0

謝謝 - 那麼也許有一個與我的推理有問題?不幸的是,我不知道如何檢查的DOM(試穿螢火,不能使正面或反面出來的任何東西)... –

+1

在Firefox中,你應該可以右擊該元素在頁面中,選擇「檢查元素與螢火蟲「。然後,您會看到位於您選擇的元素上的頁面的標記。 –

+0

不錯 - ^感謝好友^我剛剛檢查過,你是正確的 - 數據屬性被刪除。這證實了我的結論,即我的推理是一個問題。現在的問題是,爲什麼,當通過AJAX添加一個新項目並且我調用了相同的函數時,是否在所有項目上運行循環,並且所有內容都被切換? –