2014-09-16 6 views
5

शामिल हैं मैं दो तत्वों के बीच सभी सामग्री प्राप्त करने के लिए nextUntil विधि का उपयोग कर रहा हूं। लेकिन इस विधि में आउटपुट में text nodes शामिल नहीं है। यह [<br>, <br>, <br>] जैसे सरणी देता है। मैं टेक्स्ट नोड्स सहित सभी सामान कैसे प्राप्त कर सकता हूं? धन्यवाद।अगला jQuery में टेक्स्ट नोड्स

यह एचटीएमएल कोड है:

<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

मैं 'सामग्री()' के लिए कोड कैसे संशोधित कर सकता हूं? – 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 के भीतर एक अन्तर्निहित स्पॉलियर ब्लॉक की अनुमति देता है।

नोट्स:

  • $() एक खाली jQuery संग्रह (एक खाली सरणी की तरह, लेकिन के लिए jQuery वस्तुओं)
  • है मैं तुम्हें अपने विफल के लिए एक शैली का उपयोग करें और एक वर्ग का उपयोग करने का सुझाव उदा result.wrapAll('<div class="spoiler"></div>');

उदा। http://jsfiddle.net/ykv3gf5L/3/

+2

यह वह उत्तर है जिसे मैं ढूंढ रहा हूं, बहुत बहुत धन्यवाद :) – doruk

संबंधित मुद्दे