jQuery – предыдущий узел – нет общего родительского узла
-
27-09-2020 - |
Вопрос
Используя jQuery, я хотел бы найти предыдущий узел из данного узла.Предыдущий узел и данный узел не могут иметь один и тот же родительский узел!Пожалуйста, проверьте следующий фрагмент:
<div class="container">
<div id="sec1">
<p>Some text</p>
<p><b>Some</b> text<</p>
<p>Some <b>more</b> text</p>
</div>
<div id="sec2">
<p>just a text</p>
</div>
<div id="sec3">
<p>another <span id="cursorPos1"></span>text</p>
<p><b>yet</b> another<span id="cursorPos2"></span> text</p>
</div>
Предположим, что текущий данный узел $("span#cursorPos1")
, и я хотел бы найти предыдущий жирный текст, тогда результат должен быть "<b>more</b>
".Здесь данный узел находится в div#sec3
, а целевой предшествующий узел находится в div#sec1
.
Если текущий данный узел $("span#cursorPos2")
, то предыдущий жирный текст будет "<b>yet</b>
".Здесь и данный узел, и целевой предшествующий узел находятся в одном и том же месте. div#sec3
.
По сути, иерархию вообще не следует учитывать.Из данного узла селектор должен просто найти предыдущее совпадение.
Пожалуйста, дайте мне знать, как это можно сделать.
Спасибо
Шрикантх
Решение
Не очень хорошее решение, но я думаю, что это поможет.Идея состоит в том, чтобы найти все теги, выделенные жирным шрифтом, и элемент курсора, найти положение курсора в результирующем массиве, а затем вернуть элемент перед ним.
просто собрал это вместе, возможно, есть способы получше.если вы используете это, вероятно, вам также потребуется некоторая проверка ошибок.
prevBold = function(myId) {
var boldAndMe = $('#' + myId + ', b').toArray();
var me = $('#' + myId).get(0);
var myPos = boldAndMe.indexOf( me );
return myPos > 0 ? $( boldAndMe[myPos-1] ) : null;
}