1

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 の補遺の方が優れています。

4

1 に答える 1