Возможно ли с помощью jquery сделать следующее:
Если документ помечен с h1 по h6, добавляйте ссылку «вверх» после каждого элемента заголовка, только если есть текст, написанный послезаголовок и перед следующим ..
Итак:
<h1>h1</h1>
<p>text</p>
<h2>h2</h2>
<h3>h3</h3>
text text
<h4>h4</h4>
<br><br>
<h5>h5</h5>
<br><br>text
<h6>h6</h6>
<div>test</div>
приведет к
<h1>h1</h1>
<p>text</p>
<a..>back to top</a>
<h2>h2</h2>
<h3>h3</h3>
text text
<a..>back to top</a>
<h4>h4</h4>
<br><br>
<h5>h5</h5>
<br><br>text
<a..>back to top</a>
<h6>h6</h6>
<div>test</div>
<a..>back to top</a>
Таким образом, текст может быть в параграфах, div, span или нетотмечен на всех ...
Я не уверен, как это сделать, и как даже выбрать последний элемент перед следующим (или что, если это последний?), чтобы добавить ссылку на.
Любая помощь (не должна быть полным решением) приветствуется.
Редактировать: Самая большая проблема заключается в следующем:
К сожалению, яя работаю с CMS, которая не выводит абзацы, но вместо этого выводит
<h1>..</h1><br>text<br><br><h2>h2</h2>
и т. д.
Так же:
<h1>test</h1>
<br>
<h2>test</h2>
с использованиемВторое решение, представленное здесь, которое добавляет верхнюю ссылку, когда это не должно .. Я не уверен, как предотвратить это.
Редактировать 2:
Попытка изменить на:
$('#content').find('h1, h2, h3, h4, h5, h6').each( function(i, item) {
var nextItems = $(item).nextUntil('h1, h2, h3, h4, h5, h6');
if (nextItems.filter('p, div, span').size() > 0 || nextItems.filter(function() {
return this.nodeType == Node.TEXT_NODE;
}).size() > 0) {
nextItems.last().after('<p><a href="#toc-top" class="toc-top">Back To Top</a></p>');
}
});
, но он никогда не находит текстовые узлы .. Есть причина, почему?содержимое - это h2, за которым следуют br и текст ...