2013-06-25 176 views
-2

我有這個工作,但我想知道這是正常的做法。選擇自定義html屬性

<button vacation="2" type="button" class="delete" id="vc-2"><i class="icon-static"></i></button> 

我需要自定義屬性。我製作了名爲vacation的自定義html屬性。我正在通過事件訪問它,像這樣:

var vacation = parseInt(e.currentTarget.attributes[0].value); //Zero, since this is the first attribute. 

這樣的作品,但我很感興趣的是這是最佳做法?如果可能,我想避免使用HTML5數據屬性。

+0

爲什麼你想避免投入HTML正是這種類型的擴展名的機制,使用無效的標記呢? (提示:無效的HTML不是最佳實踐)。 – Quentin

+2

這正是爲什麼HTML5 data- *屬性存在....爲什麼不使用它? –

+0

如果出於兼容性原因試圖避免使用HTML5,那麼只使用內部文本或類或其他類似的內置機制怎麼樣? – Will

回答

0

它被認爲是不好的標記。儘量避免它。如有必要,請使用隱藏字段並分配給值屬性。你爲什麼反對HTML5數據屬性?這就是它的目的。

編輯 要處理事件,您將需要使用點擊處理程序。

您的標記將是這個樣子:

<button type="button" class="delete" id="vc-2" data-vacation="2"> </button> 

和你的js/jQuery將是這樣的:

var button = $('#vc-2'); 
button.click(function(){ alert(button.data('vacation')); }); //click handler 
+0

如果我想使用html5數據屬性,那麼如何通過事件訪問它? 我有接受e的函數。所以,e.currentTarget ......我在那裏放什麼? – Emilly

+0

@Emilly一個事件必須有一個處理程序。因此,在'event'函數中,你可以使用'$(this)'獲取當前元素和'.attr(attributename)'或者更合適的'.data(attributename)'... – War10ck

2

不使用HTML5數據 - *屬性,你可以做到以下幾點.. 。

標記

<input type="hidden" value="2" id="vc-2-vacation" /> 
<button type="button" class="delete" id="vc-2"><i class="icon-static"></i></button> 

jQuery的

$(".delete").click(function() { 
var vacation = ($(this).id + "-vacation").val(); 
} 

更新:起初,我給了使用HTML5數據 - *屬性的答案。經過downvoted提供正確的答案,但不完全是OP的要求,我改變了我的答案,以上不太理想的方法,這雖然工作,我永遠不會使用自己...

下面,你會發現「最佳實踐」的答案就是使用HTML5的data- *屬性。

理想的解決方案

標記

<button data-vacation="2" class="delete" id="vc-2"><i class="icon-static"></i></button> 

jQuery的

$(".delete").on("click", function() { 
    var vacation = $(this).data("vacation"); 
}); 
+1

親愛的downvoters - 我改變了我的答案以適應OPs問題 - 儘管使用HTML5 data- *屬性是最佳解決方案 –

+1

+1(我不是downvoter) - 我因爲暗示相同而被低估。我同意你的觀點,絕對沒有理由避免'data- *' - 它是有效的,並且與每個瀏覽器兼容。 – Joe

+0

我不是downvoter。儘管如此,我也不是一個高調的人。這是爲什麼。你提供的答案適用於OP,並且不符合OP規定的'數據'屬性指南。因此,我認爲它不應該被低估。然而,這就是說,OP還詢問了「最佳實踐」。最好的做法是將'data-'屬性用作它們設計的屬性(以及@Joe在之前刪除的回答中所陳述的內容)。這是一種「解決方法」,因此不是最佳實踐。 – War10ck

0

如果你的目標是避免HTML5,那麼最好的做法是使用一類:

<button type="button" class="delete vacation-2" id="vc-2"><i class="icon-static"></i> </button> 

可以使用正則表達式獲得的價值:

$('button').on('click', function(){ 
     var classList = $(this).attr('class'); 
     var patt = /vacation-([0-9]{1,})/; 
     var vacation = classList.replace(patt, function(a,b){ 
          return b; 
         }); 
     $(this).html(vacation); 
}); 

WORKING EXAMPLE

+0

像_Andy's_答案下面,我不會downvote你,因爲你的解決方案的作品。這就是說,我不同意爲此使用類。 OP應該認識到'data-'屬性是爲此設計的,因此是最好的實踐,純粹而簡單。沒有任何數量的「變通」符合最佳實踐。 – War10ck

+0

我同意'data-'屬性是最好的路線,但我必須假設他們無法使用HTML5功能的原因有一些。 – ExceptionLimeCat

+0

@ExceptionLimeCat同意這是爲什麼我不會downvote。這是一個完美的合法答案。海事組織海事組織對這些準則不合理,並沒有規定他們的理由。 – War10ck