Ответ 1
Эта страница объясняет несколько способов аннотации HTML таким образом, но ни один из них не является очень удовлетворительным.
Тем не менее, они почти все, что у вас есть. Хотя эта страница не является ужасно хорошим резюме, есть ошибки, и она неправильно понимает, что означает "ненавязчивый JavaScript".
Например, на самом деле совершенно справедливо положить элемент script внутри тела - просто не непосредственно внутри элемента таблицы. Вы можете поместить все фрагменты script в нижней части таблицы или поместить каждую строку в свою собственную таблицу или даже с некоторыми ограничениями, если вы собираетесь мутировать DOM внутри данной строки.
Настройка "id =" comment-123 ", тогда сканирование всех строк с идентификатором, начинающимся с" comment ", действительно полезно для вашего конкретного случая. Для установки неидентифицирующих дополнительных атрибутов информации вы можете использовать либо атрибуты данных HTML5, либо взломать их в имя класса, используя, например." class= "комментарий типа-foo data-bar" ". Конечно, оба идентификатора и имена классов имеют свои ограничения на то, какие символы вы можете использовать, но можно закодировать любую строку до допустимых строк. Например, вы можете использовать пользовательскую кодировку в стиле URL, чтобы скрыть не буквенно-цифровые символы:
<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! ☺"
Вы можете даже хранить сложные нестроковые значения таким образом, кодируя их строки JavaScript или JSON, а затем извлекая их с помощью 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 до сих пор делают.