2015-02-22 19 views
5

Tôi có một số văn bản không có thẻ. Tôi cố gắng tìm nó. Với jQueryTìm bất kỳ văn bản nào không có thẻ

(đây là văn bản dinamic, vì vậy tôi không biết có bao nhiêu peaces của văn bản Tôi có hoặc nơi họ đang có. Tôi chỉ biết rằng đang ở trong một div. Điều này khác với câu hỏi khác xung quanh)

Tôi có thể tìm thấy một giải pháp để tìm văn bản mà không có thẻ, bọc nó trong <p> Nhưng điều này tạo ra một số thẻ p trống quá. Vì vậy, các câu hỏi là:
- This.nodeType === 3 dường như tìm văn bản và dấu cách. Ai đó có thể giải thích?
- Ai đó có thể giải quyết vấn đề này hoặc hiển thị một cách khác để chỉ tìm văn bản không có thẻ?

(tôi có thể tìm nodeType === 3 "Đại diện cho nội dung văn bản trong một phần tử hoặc thuộc tính")

Trong fiddle nếu bạn muốn chơi ở đó: http://jsfiddle.net/bhpaf8hu/

$("#tot").click(function() { 
 
\t \t \t \t 
 
\t $("div").contents().filter(function() { 
 
\t \t return this.nodeType === 3; 
 
\t }).wrap("<p>"); 
 
\t 
 
});
p { background:green; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="tot"> 
 
    <h1> This is a h1</h1> 
 
    Text without p 
 
    <br> 
 
    Another text without p 
 
    <br> 
 
    <p>This text has p</p> 
 
</div>

GIẢI PHÁP MONG MUỐN: Vì vậy, tôi muốn tìm văn bản không có thẻ và bọc nó trong thẻ ap. Trong ví dụ này, đây là những gì tôi đang tìm kiếm:

<div id="tot"> 
    <h1> This is a h1</h1> 
    <p>Text without p</p> 
    <br> 
    <p>Another text without p</p> 
    <br> 
    <p>This text has p</p> 
</div> 
+1

Được rồi, bạn có thể tìm thấy chúng, và sau đó làm những gì với họ? – dfsq

+0

Trong trường hợp đơn giản này, tôi bọc trong một p. Nhưng có vẻ như nó tìm thấy không gian quá – Nrc

Trả lời

5

Một giải pháp để tránh bọc và trắng không gian được sử dụng trang trí như:

$("#tot") 
    .contents() 
    .filter(function() { 
    // get only the text nodes 
    return this.nodeType === 3 && this.nodeValue.trim() !== ""; 
}).wrap("<p />"); 

fiddle

Tài liệu tham khảo

Node.nodeValue

String.prototype.trim()

+0

AFAIK '.trim()' sẽ bỏ lỡ các dòng mới và các tab, mặc dù. :) – Shef

+0

Bạn có thể giải thích:! == "" Điều này chính xác làm gì? – Nrc

+0

Không bao gồm các phần tử có khoảng trắng. Nếu bạn có nghĩa là gì! ==: Không so sánh bình đẳng mà không cần chuyển đổi kiểu: Trả về true nếu toán hạng không bằng nhau hoặc nếu chúng thuộc loại khác nhau. –

2

Bạn có thể sử dụng $.trim() để xóa tất cả dòng mới, dấu cách (bao gồm dấu cách) và các tab từ đầu và cuối của chuỗi nút văn bản.

Điều này sẽ lọc ra các nút văn bản chỉ là dấu cách, tab hoặc dòng mới.

Dưới đây là fork of your fiddle và đoạn mã tương ứng bên dưới.

$("#tot").click(function() { 
 
\t \t \t \t 
 
\t $("div").contents().filter(function() {  
 
\t \t return  this.nodeType === 3 
 
       && $.trim($(this).text()) != ''; 
 
\t }).wrap("<p>"); 
 
\t 
 
});
p { background:green; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="tot"> 
 
    <h1> This is a h1</h1> 
 
    Text without p 
 
    <br> 
 
    Another text without p 
 
    <br> 
 
    <p>This text has p</p> 
 
</div>

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