В HTML нет такой вещи, как «пользовательские теги». Вы не можете просто сделать теги. Они могут работать в некоторых браузерах, но на это не стоит полагаться. Используйте «нормальные» теги, такие как div
и span
с классом.
РЕДАКТИРОВАТЬ: Хорошо, я думаю, что я получил то, что вы хотите сейчас. Однако вы по-прежнему не можете использовать ни пользовательские элементы, ни самозакрывающиеся - особенно если вам нужно поддерживать IE, поскольку он также не поддерживает. Вместо этого вам нужно будет использовать пустые элементы, такие как:
<html><body><a><b>Some <span id="s1-1"></span> text></b> <c>data <span id="s2-1"></span>here</c> </a></body></html>
Затем вам нужно пройти по дереву документа, начиная с <span id="s1-1"></span>
и заканчивая <span id="s2-1"></span>
, и "обернуть" все текстовые узлы, найденные на пути, с помощью span
s и класса, который вы можете использовать для выделения.
Примерно так (непроверенный, с макушки головы и, скорее всего, неправильно, потому что я устал):
function wrapUntil(element, nr) {
if (element.id === "s2-" + nr)
return;
if (element.nodeType === 3) {
var span = document.createElement("span");
span.className = "highlight-" + nr;
element.parentNode.replaceChild(span, element);
span.appendChild(element);
element = span;
} else {
var child = element.firstChild;
if (child) {
wrapUntil(child, nr);
}
}
var sibling = element.nextSibling();
if (sibling)
wrapUntil(sibling, nr);
else
wrapUntil(element.parentNode(), nr);
}
wrapUntil(document.getElementById("s1-1"), "1");
Кстати, в зависимости от того, где и как вы получаете ваши данные, это может быть то, что вы должны делать на стороне сервера, а не с помощью JavaScript.