2012-03-02 7 views
16

nextUntilを簡単に実行する方法があるので、セレクタに一致する要素が含まれていますか?当然のjQuery nextUntil(一致する要素を除外しないことを含む)?

$("#content").find("h3:first").prev().nextUntil("ul:last").wrapAll("<div id='collapse'></div>"); 
+1

あると思いますか?これは、あなたが達成しようとしていることを理解するのに役立ちます。 –

答えて

20

.prev()を削除し、以下に示すように、あなたのセレクタの終わりに.addBack()を使用します。

$("#content").find("h3:first").nextUntil("ul:last").addBack().wrapAll("<div id='collapse'></div>"); 

事前1.8 andSelf代わりのaddBack

+7

この古い質問について答えを受け入れたことはありませんでした。この関数は廃止され、.addBack()のエイリアスになりました。これはjQuery 1.8以降で使用する必要があります。 "#:。 – jwinn

+0

私はちょうどこの回答を発見しました(21-07-2017)、それは私のプロジェクトで私を助けました。 – samouray

-1

あなたは、単にjQueryのnextAll使用することができます:私は前の兄弟がある場合にのみ、罰金である、これを持っています。

'nextAll'には、そのセレクタに一致する以下の要素が含まれます。

'nextUntil'は一致するセレクタ要素を除外します。

+0

"next"はただ1つの兄弟を取得しますが、定義されたエンドポイントまですべての兄弟を取得します。 – jwinn

+0

はい、あなたは正しいです、私の答えを変えてください。 –

+0

-1:from nextAll()ref:一致した要素のセット内の各要素のすべての** following **兄弟を取得します。オプションでセレクタによってフィルタリングされます。したがって、これには一致した要素が含まれません**。 –

1

私が見つけたこの問題を回避するには、length使用してnextUntil(またはprevUntil)、その後、nextAll()にこの長さ+ 1でslice()を使用取得することでした:

var inclusiveNextUntil = $(this).nextUntil('.some-class').length; 
var inclusiveNextUntil = $(this).nextAll().slice(0 , inclusiveNextUntil + 1); 

それは不器用だが、それが動作します。 HTH

FWIW in the nextAll docs Biziclop mentions+ *を追加:

$obj.nextUntil('.last-item-to-include + *') 

が、これは私のために動作しません:/

1

は、ここで私は何をすべきかです。私はそれが他の提案より少しきれいだと思う。

var elearr = $('selector1').nextUntil('selector2'); 
var lastele = elearr[elearr.length-1]; 
elearr.push($(lastele).next()); 
0
var s = $("li.start").nextUntil("li.stop"); 
s = s.add(s.last().next()).add(s.first().prev()); 
//and do whatever you need to with s 

最も直感的に使用する必要があり、私は思います。すべてjQueryメソッドで作成されています。 2回検索する必要はありません。理解しやすく、覚えやすい。

0

私はあなたのHTMLマークアップの関連部分を持つあなたの質問を更新することができ、正しい答えは

$("#content").find("h3:first").nextUntil("ul:last").addSelf().wrapAll("<div id='collapse'></div>"); 
関連する問題