2014-09-16 8 views
5

두 요소 사이에 모든 내용을 가져 오려면 nextUntil 메서드를 사용하고 있습니다. 그러나이 방법은 출력 할 text nodes을 포함하지 않습니다. [<br>, <br>, <br>]과 같은 배열을 제공합니다. 텍스트 노드를 포함한 모든 것을 어떻게 얻을 수 있습니까? 감사. Jquery nextNextil 텍스트 노드 포함

는 HTML 코드입니다 :

<div class="content" > 
    --- <a class="b" href="/?q=spoiler">spoiler</a> --- 
    <br> 
    <br> 
    dangerous text here 
    <br> 
    --- <a class="b" href="/?q=spoiler">spoiler</a> --- 
    <br> 
    safe text here 
    <br> 
    --- <a class="b" href="/?q=spoiler">spoiler</a> --- 
    <br> 
    <br> 
    dangerous text here 
    <br> 
    --- <a class="b" href="/?q=spoiler">spoiler</a> ---  
</div> 

그리고 이것은 내 JS 바보 코드 :

$('.content a:contains("spoiler").b:even').each(function(){ 
    $(this).nextUntil('.content a:contains("spoiler").b') 
      .wrapAll('<div style="border:solid 1px black;"></div>'); 
}); 

jsfiddle : http://jsfiddle.net/Lwk97rvq/1/

+6

'.contents()'만 텍스트 노드를 반환합니다. –

+0

'contents()'에 대한 코드를 어떻게 수정할 수 있습니까? – doruk

+1

아래의 잠재적 인 답변 (내가 정확하게 목표를 이해한다면) –

답변

3

가 만 jQuery를 .contents() 방법은 모든 노드를 반환합니다 (포함 텍스트 노드, 일반적으로 무시 됨).

그래서 어쩌면 이런 일이

http://jsfiddle.net/ykv3gf5L/2/

$('.content').each(function() { 
    var open = false; 
    var result = $(); 
    $(this).contents().each(function() { 
     var $this = $(this); 
     if ($this.text() == "spoiler") { 
      if (open) { 
       result.wrapAll('<div style="border:solid 1px black;"></div>'); 
       open = false; 
      } else { 
       result = $(); 
       open = true; 
      } 
     } else { 
      result = result.add($this) 
     } 
    }); 
    if (open) { 
     result.wrapAll('<div style="border:solid 1px black;"></div>'); 
    } 
}); 

는 그냥 모든 노드를 반복하고 플래그에 따라이 새 컬렉션을 시작, 또는 발견 된 노드를 래핑? :.

마지막 if (open)content 분류 된 div 내에 닫히지 않은 spolier 블록을 허용합니다.

주 :

  • $()이 (jQuery를 오브젝트는 하늘의 배열을 좋아하지만 용) 빈 jQuery를 수집
  • 이다 나는 당신이 당신의 스포일러의 스타일을 사용하는 클래스를 사용하는 것이 좋습니다 예를 들어, result.wrapAll('<div class="spoiler"></div>');

http://jsfiddle.net/ykv3gf5L/3/

+2

이것은 내가 뭘 찾고 있는지, 고마워요? – doruk