DOM ツリーのどこにあるかに関係なく、要素からセレクターの以前の出現を取得する方法を知りたいです。以前の出現は、元の要素の子の 1 つではないと想定しています。
例:
<body>
<p class="somethingImportant">Important</p>
<h1>
<p class="somethingImportant">Important too!</p>
</h1>
<table>
<tr>
<td id="start">Starting from here!</td>
</tr>
</table>
</body>
<p class="somethingImportant">Important too!</p>
要素から始めて、要素を取得したい<td id="start">
。
prev()
JQuery でandを使用してみましたnext()
が、直接の兄弟しか得られません。私もそれを試しましたclosest()
が、それは祖先しか得られません。必要な要素が祖先の子であることに注目してください。
だから、私は何かを試してみました$("#start").closest(".somethingImportant").find(".somethingImportant")
.JQueryは結果を返しませんでしたclosest()
.
のようなものが欲しいのですがprevAll(".somethingImportant").last()
、直接の兄弟の制限はありません。
他の誰かがこの問題に遭遇しましたか?
編集
私が解決しようとしている問題は、開始要素から前の「ページ」または前の「見出し」を取得する方法です。開始要素は、現在のノードを強調表示する「カーソル」です。コードの後半で、ビューをその要素までスクロールします。
問題になり始める状況は次のとおりです。
<p class="pageNumber">1</p>
<h1>Kinds of Animals</h1>
<p>Here are different kinds of animals:</p>
<table>
<tr><td>Duck</td><td>Giraffe</td></tr>
<tr><td>Anteater</td><td><span id="highlight">Badger</span></td></tr>
</table
から始め`<span id="highlight">
ます。p.pageNumber, h1, h2, h3, h4, h5, h6
ハイライトの前にある限り、DOM のどこにネストされていても、JQuery セレクターに一致する前の要素を取得したいと考えています。セレクターは、見出し要素として認識されるすべての要素に一致します。
この場合、 を返す必要があり<h1>Kinds of Animals</h1>
ます。
コードサンプル
Lee のソリューションを使用して、私がやりたいと思っていた機能を、非常に優れたエレガントな機能で構築することができました。
function GetPreviousOccurrence(elemSel, sel) {
var selector = elemSel + ", " + sel;
var prev;
$(selector).each(function() {
if ($(this).is(elemSel)) {
return false;
}
prev = this;
});
return prev;
}
私の場合、elemSel = "#highlight";
それsel = "p.pageNumber, h1, h2, h3, h4, h5 , h6";
は最高のパフォーマンスではないかもしれませんが、少なくとも読みやすいです。
追記: Lee の補遺の方が優れています。