2009-11-23 26 views
3

有沒有辦法有不規範的屬性,如如何添加非標屬性的一個有效方式

onselectstart 
oncontextmenu 
... 
在標籤

,並仍通過驗證的HTML 4.01過渡不知何故?

除了稍後使用Javascript添加屬性。

+1

有效的標記並不能真正爲您賺取任何布朗尼分數。現在很多開發人員在看到0錯誤時似乎獲得了一些虛假的自豪感,但它確實沒有意義。如果您的應用在所有現代瀏覽器中正常運行,請輕拍自己的背部;你已經完成了你需要做的一切。 –

+0

複製我的評論如下:---我已經開始關心即使在後端驗證,因爲它可以更容易地檢測到錯誤。爲了獲得正確的工作流程,我想在沒有任何可修復的地方看到綠色(驗證器)指示燈,並且在出現紅燈時顯示。這就是爲什麼我要刪除即使最小的錯誤,儘管它是完全沒有意義的。 –

+0

相關:http://stackoverflow.com/questions/209428/non-standard-attributes-on-html-tags-good-thing-bad-thing-your-thoughts –

回答

5

使用這些屬性將產生一個無效的文檔。

稍後使用Javascript添加這些屬性將產生一個無效的文檔(即使W3C驗證程序不能告訴你這樣)。

但W3C從未反對使用專有擴展。驗證不應該是一項要求。這是一種告訴你何時不符合規範的方法。 W3C不會僅僅爲無效頁面發送FBI。

如果您依賴專有擴展來爲您的訪問者提供更好的體驗(但不依賴於它),那麼您就處於良好的道路上:-)只是爲那些在下一個規範中的人祈禱(或貢獻)。


現在,如果是關於防止瀏覽器上下文菜單或選擇,這只是粗魯!不要這樣做!

+1

即使在後端,我也開始關心驗證,因爲它可以更容易地檢測錯誤。爲了獲得正確的工作流程,我想在沒有任何可修復的地方看到綠色(驗證器)指示燈,並且在出現紅燈時顯示。這就是爲什麼我想要刪除最小的無效。 「oncontextmenu」是完全無辜的,並綁定到一個單一的DIV,不要擔心:) –

+0

我從來沒有打算讓你感到內疚的代碼無效。您似乎正在以正確的方式使用驗證:檢測編碼錯誤。現在針對您的具體問題,您的後端驗證可能具有這些屬性的特定情況並僅發出警告?這將允許「中途通過」,同時仍然檢測到真正的錯誤。 –

+0

由於真正的錯誤,我的意思是重要的錯誤,如無效的結構或拼寫錯誤的屬性,它們可能會混亂渲染並使你失去時間。 –

2

不,你將不得不改變文檔類型。

<!DOCTYPE HTML> 

該doctype將允許您使用自己的屬性。繼承人a good article關於此事

+2

這隻允許您使用自定義屬性開始data- - 雖然示例使用了不能用這種方式表示的專有屬性。該問題還指定了HTML 4.01 Transitional(HTML5不是)。 – Quentin

+0

這就是爲什麼我開始的問題沒有,但指定了一個替代方案。 –

+0

@Ben:重讀David的評論。他說你的選擇是錯誤的。 – Chuck

2

不,它不是。在符合語言的同時,沒有向語言添加內容的餘地。

5

雖然您不能在HTML 4.01中添加自己的標籤或屬性,但常用的技術是使用標準的HTML標籤或屬性來包含您的信息,即使它不完全符合規範的正確用法。例如,「類」屬性可以存儲幾乎任何類型的數據:

<a href="#" id="user-link-1" class="username:matt email:[email protected]">Matt</a> 

您可以檢索類上面的鏈接,並分拆'class屬性以檢索數據。

我見過的一些其他標籤和屬性用於自定義數據:<script>具有非JavaScript「類型」值的標籤,隱藏的輸入值以及各種標籤上的「標題」屬性。

你有幾個其他的選擇,如果你不介意從HTML 4改變:

您還可以通過JavaScript在運行時上將自定義屬性添加到HTML文檔。例如:

var body = document.getElementsByTagName("body")[0]; 
body["my-attribute"] = "Hello, world!"; 
alert(body["my-attribute"]); 

,如果你的信息是動態的,並不需要被存儲在標記在所有這可能是有益的。

+0

謝謝,但在我的情況下,它是關於(IE)這些特定標籤可以增強用戶體驗,因此我無法將值存儲在其他屬性中。 –

0

我過去做過的一件事就是使用「數據」,這通常用於幻燈片等。但寫出你需要的數據就像你在「樣式」屬性中一樣。

<div class="your_element" data="onselectstart:foo;oncontextmenu:bar;"> 
</div> 

然後使用jQuery來獲取數據:

var onSelectStart = getData($(".your_element"), "onselectstart"); 

功能:

// 
function getData(elementObject, indexString) 
{ 
    var dataElements = elementObject.attr("data").trim().split(";"); 
    var result = dataElements.some(function(entry) { 
     dataArray = entry.trim().split(":"); 
     if(dataArray[0] == indexString) 
     { 
      found = dataArray[1].trim(); 
      return true; // return from "some" 
     } 
    }); 
    return result ? found : false; 
} 

並非是有效的不是世界的末日,因爲其他幾個提到。就像我說的那樣,「數據」通常被使用,甚至在某些IDE中被強調爲有效。

相關問題