2014-09-16 14 views
5

Tôi đang sử dụng phương pháp nextUntil để tải tất cả nội dung giữa hai phần tử. Nhưng phương pháp này không bao gồm text nodes để xuất. Nó cung cấp một mảng như [<br>, <br>, <br>]. Làm thế nào tôi có thể nhận được tất cả các công cụ bao gồm cả các nút văn bản? Cảm ơn.Jquery nextUntil bao gồm các nút văn bản

Đây là mã 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> 

Và đây là mã câm js của tôi:

$('.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

Chỉ '.contents()' trả về các nút văn bản. –

+0

làm cách nào tôi có thể sửa đổi mã cho 'nội dung()'? – doruk

+1

Câu trả lời tiềm năng bên dưới (Nếu tôi hiểu mục đích chính xác) –

Trả lời

3

Chỉ có phương pháp jQuery .contents() trả về tất cả các nút (bao gồm cả văn bản nút, thường bị bỏ qua).

Vì vậy, có lẽ một cái gì đó như thế này ?:

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

Nó chỉ lặp tất cả các nút và dựa trên một lá cờ bắt đầu một bộ sưu tập mới, hoặc kết thúc tốt đẹp các nút được tìm thấy.

Kết quả cuối cùng if (open) cho phép một khối spolier không rõ ràng trong một div được phân loại content.

Ghi chú:

  • $() là một bộ sưu tập jQuery rỗng (như một mảng trống rỗng nhưng đối với đối tượng jQuery)
  • tôi đề nghị bạn sử dụng một phong cách cho spoilers của bạn và sử dụng một lớp ví dụ result.wrapAll('<div class="spoiler"></div>');

ví dụ: http://jsfiddle.net/ykv3gf5L/3/

+2

đây là câu trả lời những gì tôi đang tìm kiếm, cảm ơn rất nhiều :) – doruk

Các vấn đề liên quan