本頁解釋了以這種方式註釋HTML的一些方法,但它們都不是非常令人滿意。
儘管如此,他們是幾乎所有你已經有了。雖然該頁面並不是一個非常好的摘要,但是存在錯誤,並且誤解了JavaScript意味着什麼「不顯眼」。
例如它實際上是完全有效的把一個腳本元素體內 - 只是沒有直接的表元素中。你可以把所有的腳本片段在表的底部,或把每一行中自己的表,甚至,有一些限制,如果你正打算變更DOM,在討論的行內。
設置「ID =‘評論-123’,」然後用一個id開始「comment-」掃描所有行的是你的具體情況確實不錯。爲了設置非標識的額外信息屬性,您可以使用HTML5數據屬性或使用例如將其添加到類名中。 「class =」註釋type-foo數據欄「」。當然,ID和類名對於可以使用的字符都有限制,但可以將任何字符串編碼爲有效字符串。例如,你可以使用自定義URL式編碼隱藏非字母數字字符:通過編碼它們的JavaScript或JSON字符串,然後使用檢索它們
<tr class="greeting-Hello_21_20_E2_98_BA">
...
</tr>
function getClassAttr(el, name) {
var prefix= name+'-';
var classes= el.className.split(' ');
for (var i= classes.length; i-->0;) {
if (classes[i].substring(0, prefix.length)==prefix) {
var value= classes[i].substring(prefix.length);
return decodeURIComponent(value.split('_').join('%'));
}
}
return null;
}
var greeting= getClassAttr(tr, 'greeting'); // "Hello! ☺"
你甚至可以複雜的非字符串值存儲在這種方式, exec(或JSON.parse,如果可用)。
但是,如果你是把什麼不平凡的在那裏它很快就會變得混亂。這就是你可能更喜歡評論的地方。除了序列' - '之外,你可以在這裏適合任何東西,如果它碰巧出現在字符串中,它很容易逃脫。
<table>
<tr class="comment">
<td>...</td>
<!-- {"id": 123, "user": 456} -->
</tr>
</table>
function getLastComment(node) {
var results= [];
for (var i= node.childNodes.length; i-->0;)
if (node.childNodes[i]==8)
return node.childNodes[i];
return null;
}
var user= getLastComment(tr).user;
摘要警告說,這可能無法保證正常工作,因爲XML解析器可以丟棄的意見,但隨後DOM Level 3的LS解析器必須在默認情況下讓他們和每一個瀏覽器和主要的XML庫至今呢。
對此有讀:http://stackoverflow.com/questions/992115/custom-attributes-yay-or-nay/992464 – James 2009-08-25 23:40:53
這是一個有趣的閱讀,但遺憾的是所有的建議,跌倒了,我引用的頁面中。我懷疑沒有好的答案,並且大多數人使用類和id屬性和隱藏元素的組合。 – Shawn 2009-08-26 00:03:28