Использование JQuery 1.7.1
У меня два divs
<div class="highlightStart"></div>
{page content here}
<div class="highlightEnd"></div>
Они отображаются в источнике страницы. Но этот jquery, который я добавил в нижней части страницы, не работает:
<script type="text/javascript" id="makeHighlight">
$(document).ready(function () {
$("div.highlightStart").replaceWith("<section class='highlight'>");
$("div.highlightEnd").replaceWith("</section>");
});
</script>
Ошибок javascript, отображаемых в консоли браузера (Chrome). Просто ничего не заменяется.
Основываясь на помощи истервуда, использовали это как решение:
С деревом HTML:
<div><div><div class="highlightStart">highlightStart</div></div></div>
<div>Outside<div>Content to Highlight</div>More</div>
<div>second</div>
<div>third</div>
<div><div><div class="highlightEnd">highlightEnd</div></div></div>
Этот Javascript:
$(document).ready(function () {
$('.highlightStart').parent().parent().replaceWith("<div class='highlightStart'>");
$('.highlightEnd').parent().parent().replaceWith("<div class='highlightEnd'>");
$('.highlightStart').nextUntil('.highlightEnd').andSelf().wrapAll("<section class='highlight'>");
$('.highlightStart, .highlightEnd').remove();
});
Прежде всего, я хочу, чтобы вы создали неправильную структуру DOM. Если ваш скрипт будет запущен, он будет выглядеть так:
<div class="highlightStart"><section></div>
{page content here}
<div class="highlightEnd"></section></div>
и это не хорошая структура, если вы хотите иметь:
<section>
{page content here}
</section>
Должно быть что-то вроде этого:
Ваш DOM:
<div id="content">
{page content here}
</div>
И в вашем скрипте:
$(document).ready(function () {
content = $('#content').text();
$('#content').html($('<section>').text(content));
});
Пожалуйста см. Myfiddle для справки
Метод replaceWith ожидает целые элементы, а не теги. Вам нужно будет обернуть содержимое вашей страницы новым элементом, а затем удалить два оригинальных div.
Обновление: это может закрыть вас:
$(document).ready(function () {
$('.highlightStart').nextUntil('.highlightEnd').andSelf()
.wrap('<section class="highlight"></section>');
$('.highlightStart, .hightlightEnd').remove();
});
http://jsfiddle.net/isherwood/H36UE
Что-то немного с этим, но у меня нет времени. Удачи.