2012-03-02 2 views
16

nextUntil을 쉽게 수행 할 수있는 방법이있어서 선택기와 일치하는 요소가 포함되어 있습니까? 물론jQuery nextUntil, 일치하는 요소를 제외하지 않습니까?

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

당신이 당신의 HTML 마크 업의 관련 부분과 질문을 업데이트 할 수 있습니다 생각하십니까? 이것은 우리가 당신이 성취하려는 것을 이해하는 데 도움이 될 것입니다. –

답변

20

.prev()를 제거하고 당신의 선택의 끝에 .addBack()를 사용

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

전 1.8 대신 addBack

+7

이 오래된 질문에 대한 답을 결코 받아 들여지지 않았습니다. 참고 :이 함수는 이제 더 이상 사용되지 않으며 .addBack()에 대한 별칭이되었습니다.이 함수는 jQuery 1.8 이상에서 사용해야합니다. " – jwinn

+0

방금이 답변을 발견했습니다 (21-07-2017). 내 프로젝트에서 도움이되었습니다. ty – samouray

-1

당신, 그냥 jQuery를 nextAll 사용할 수 있습니다 나는 이전 형제가있는 경우에만 고급 인이 있습니다.

'nextAll'에는 해당 선택 도구와 일치하는 다음 요소가 포함됩니다.

'nextUntil'은 일치하는 selector 요소를 제외합니다.

+0

"next"는 하나의 다음 형제를 얻는 반면 정의 된 끝점까지 모든 형제를 잡아옵니다. – jwinn

+0

예, 내 대답이 바뀌 었습니다. –

+0

-1 : from nextAll() ref : 일치하는 요소 집합의 각 요소에 대해 ** ** ** 형제를 모두 가져오고 선택적으로 선택기로 필터링합니다. 따라서 일치하는 요소가 ** 포함되지 ** 않습니다. –

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 

가장 직관적, 내 생각의 andSelf를 사용해야합니다 . 모두 jQuery 메서드로 만들었습니다. 두 번 검색 할 필요가 없습니다. 이해하기 쉽고 기억하기 쉽습니다.

0

나는 정답은

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