Вам нужно будет выяснить, как выполнять поиск в DOM, чтобы найти нужные элементы. Например, вы можете найти что-то по имени тега, а затем изучить контекст вокруг данного тега, чтобы убедиться, что это то, что вы ищете.
Если вы предоставите больше информации о том, что именно вы пытаетесь найти, мы, вероятно, могли бы помочь с более конкретным кодом.
Например, document.getElementsByTagName("br")
находит все теги <br>
в документе. Вы можете изучить каждый из них, чтобы найти двойные теги <br>
, если это то, что вы пытаетесь найти, или если вы ищете какой-то конкретный текст до или после двойных тегов <br>
, вы также можете поискать это. Как я уже сказал в своем комментарии, вам нужно более конкретно указать, какой шаблон вы на самом деле ищете, прежде чем можно будет предложить более конкретный код.
Например, вот как вы будете искать конкретный текстовый шаблон, который следует за тегом <br>
в вашем документе:
var items = document.getElementsByTagName("br");
// modify this regex to suit what you're trying to match
var re = /\w+\s\(\w+\)/;
for (var i = 0, len = items.length; i < len; i++) {
var node = items[i];
while ((node = node.nextSibling) && node.nodeType == 3) {
if (re.test(node.nodeValue)) {
// add a marker test node (just for test purposes)
var span = document.createElement("span");
span.className = "marker";
span.innerHTML = "X";
node.parentNode.insertBefore(span, node.nextSibling);
}
}
}
Вы можете изменить регулярное выражение, чтобы оно было тем, что вы хотите, чтобы поиск искал.
Вы можете увидеть рабочую демонстрацию здесь: http://jsfiddle.net/jfriend00/s9VMn/
Хорошо, вот еще один шанс угадать, какой шаблон вы ищете, используя регулярное выражение. Это ищет два последовательных тега <br>
, за которыми следует текст, соответствующий шаблону. Затем он оборачивает этот текст в диапазон, чтобы его можно было стилизовать в соответствии с четным или нечетным.
function getTextAfter(node) {
// collect text from successive text nodes
var txt = "";
while ((node = node.nextSibling) && node.nodeType == 3) {
txt += node.nodeValue;
}
return(txt);
}
function wrapTextInSpan(preNode, cls) {
// collect successive text nodes
// into a span tag
var node = preNode, item;
var span = document.createElement("span");
span.className = cls;
node = node.nextSibling;
while (node && node.nodeType == 3) {
item = node;
node = node.nextSibling;
span.appendChild(item);
}
preNode.parentNode.insertBefore(span, preNode.nextSibling);
return(span);
}
// find double br tags
var items = document.getElementsByTagName("br");
var cnt = 1;
var re = /\w+\s+\([^)]+\)\s+-\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d+,\s+\d+\d+/i;
for (var i = 0, len = items.length; i < len; i++) {
var node = items[i];
// collect text from successive text nodes
var txt = "";
while ((node = node.nextSibling) && node.nodeType == 3) {
txt += node.nodeValue;
}
// if no text, check for successive BR tags
if (txt.replace(/\n|\s/g, "") == "") {
if (i + 1 < len && node === items[i + 1]) {
// found a double BR tag
// get the text after it
txt = getTextAfter(node);
if (re.test(txt)) {
wrapTextInSpan(node, "marker" + (cnt % 2 ? "Odd" : "Even"));
++cnt;
}
++i;
}
}
}
Рабочая демонстрация здесь: http://jsfiddle.net/jfriend00/ewApy/
Вот еще одна версия, которая фактически вставляет цель развертывания/свертывания и выполняет развертывание/свертывание разделов. Это может быть так просто с правильным HTML и хорошей библиотекой, такой как jQuery, но без них это намного больше кода:
function getTextAfter(node) {
// collect text from successive text nodes
var txt = "";
while ((node = node.nextSibling) && node.nodeType == 3) {
txt += node.nodeValue;
}
return(txt);
}
function wrapTextInSpan(preNode, cls) {
// collect successive text nodes
// into a span tag
var node = preNode, item;
var span = document.createElement("span");
span.className = cls;
node = node.nextSibling;
while (node && node.nodeType == 3) {
item = node;
node = node.nextSibling;
span.appendChild(item);
}
preNode.parentNode.insertBefore(span, preNode.nextSibling);
return(span);
}
function wrapBetweenInSpan(preNode, postNode, cls) {
var node = preNode, item;
var span = document.createElement("span");
span.className = cls;
node = node.nextSibling;
if (node && node.nodeType == 1 && node.tagName == "BR") {
preNode = node;
node = node.nextSibling;
}
while (node && node != postNode) {
item = node;
node = node.nextSibling;
span.appendChild(item);
}
preNode.parentNode.insertBefore(span, preNode.nextSibling);
return(span);
}
function toggleClass(el, cls) {
var str = " " + el.className + " ";
if (str.indexOf(" " + cls + " ") >= 0) {
str = str.replace(cls, "").replace(/\s+/, " ").replace(/^\s+|\s+%/, "");
el.className = str;
} else {
el.className = el.className + " " + cls;
}
}
function hasClass(el, cls) {
var str = " " + el.className + " ";
return(str.indexOf(" " + cls + " ") >= 0);
}
function addButton(target) {
var span = document.createElement("span");
span.className = "expandoButton";
span.innerHTML = "+++";
span.onclick = function(e) {
var expando = this;
do {
expando = expando.nextSibling;
} while (expando && !hasClass(expando, "markerContents"));
toggleClass(expando, "notshown");
};
target.parentNode.insertBefore(span, target.nextSibling);
}
// find double br tags
var items = document.getElementsByTagName("br");
var cnt = 1;
var spans = [];
var re = /\w+\s+\([^)]+\)\s+-\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d+,\s+\d+\d+/i;
for (var i = 0, len = items.length; i < len; i++) {
var node = items[i];
// collect text from successive text nodes
var txt = "";
while ((node = node.nextSibling) && node.nodeType == 3) {
txt += node.nodeValue;
}
// if no text, check for successive BR tags
if (txt.replace(/\n|\s/g, "") == "") {
if (i + 1 < len && node === items[i + 1]) {
// found a double BR tag
// get the text after it
txt = getTextAfter(node);
if (re.test(txt)) {
var span = wrapTextInSpan(node, "marker marker" + (cnt % 2 ? "Odd" : "Even"));
spans.push(span);
++cnt;
}
++i;
}
}
}
// now wrap the contents of each marker
for (i = 0, len = spans.length; i < len; i++) {
wrapBetweenInSpan(spans[i], spans[i+1], "markerContents shown");
addButton(spans[i]);
}
Рабочая демонстрация этой версии: http://jsfiddle.net/jfriend00/cPbqC/
person
jfriend00
schedule
04.06.2012
enter
, когда писал это, вышло бы больше<br>
- person JBurace   schedule 05.06.2012<br>
, за которыми следует это имя/местоположение/дата). Это выглядит возможным, мне просто трудно это спланировать. - person JBurace   schedule 05.06.2012