2014-09-16 4 views
5

Ich verwende nextUntil Methode, um alle Sachen zwischen zwei Elementen zu bekommen. Aber diese Methode enthält text nodes nicht zur Ausgabe. Es gibt ein Array wie [<br>, <br>, <br>]. Wie kann ich alle Sachen einschließlich Textknoten bekommen? Vielen Dank.Jquery nextUntil enthalten Textknoten

Dies ist der HTML-Code:

<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> 

Und das ist Code meines stummer 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

Nur '.contents()' gibt Textknoten zurück. –

+0

Wie kann ich Code für 'contents()' ändern? – doruk

+1

Mögliche Antwort unten (Wenn ich das Ziel richtig verstehe) –

Antwort

3

die jQuery .contents() Methode Gibt nur alle Knoten (einschließlich Text Knoten, die normalerweise ignoriert werden).

Also vielleicht so etwas wie dies ?:

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>'); 
    } 
}); 

Es ist einfach, alle Knoten durchlaufen und basiert auf einer Fahne beginnt eine neue Kollektion oder hüllt die gefundenen Knoten.

Die endgültige if (open) ermöglicht einen nicht geschlossenen spolier Block innerhalb einer content klassifiziert div.

Hinweise:

  • $() eine leere jQuery Sammlung ist (wie ein leeres Array aber für jQuery Objekte)
  • Ich schlage vor, Sie einen Stil für die Spoiler verwenden und eine Klasse verwenden, z.B. result.wrapAll('<div class="spoiler"></div>');

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

+2

das ist die Antwort, was ich suche, vielen Dank :) – doruk