2011-09-11 29 views
7

Tôi có một yếu tố ví dụ như thế này:nhận được dòng đầu tiên của văn bản trong một jquery yếu tố

<div id="element"> 
    Blah blah blah. 
    <div>Header</div> 
    ... 
</div> 

nó cũng có thể trông như thế này:

<div id="element"> 
    <span>Blah blah blah.</span> 
    <h4>Header</h4> 
    ... 
</div> 

Tôi muốn để có được những dòng đầu tiên (xác định dòng lỏng lẻo) (Blah blah blah.) của văn bản bên trong phần tử. Nó có thể được bao bọc bên trong một phần tử con hoặc chỉ là mã vạch trần truồng. Làm thế nào để làm điều đó? Cảm ơn.

Trả lời

14

Sử dụng phương pháp contents()[docs] để có được tất cả trẻ em, bao gồm các nút văn bản, lọc ra bất kỳ sản phẩm nào (hoặc khoảng trắng chỉ) nút, sau đó lấy đầu tiên của bộ này.

var first_line = $("#element") 
         .contents() 
         .filter(function() { 
          return !!$.trim(this.innerHTML || this.data); 
         }) 
         .first(); 

nút văn bản:http://jsfiddle.net/Yftnh/

yếu tố:http://jsfiddle.net/Yftnh/1/

+0

cảm ơn, mặc dù đối với tôi điều này trả về một đối tượng chứ không phải là văn bản, tôi chỉ nên first_line [0]? – Harry

+0

Có, điều này cung cấp cho bạn một đối tượng jQuery với một trong hai phần tử hoặc nút văn bản. Nếu bạn muốn nội dung văn bản, sử dụng 'first_line.text()'. Nếu bạn muốn cắt bỏ khoảng trống đầu và cuối, làm '$ .trim (first_line.text())'. – user113716

+1

Xin chào, bạn có thể giải thích lý do tại sao bạn quay trở lại !!? Những gì là !!? – Harry

-1

đầu tiên nhận được nội dung của phần tử

var content = $('#element').html(); 

sau đó tách văn bản vào một mảng sử dụng ngắt dòng

tmp = content.split("\n"); 

phần đầu tiên của mảng là dòng đầu tiên của nguyên tố này

var firstLine = tmp[0]; 
+1

đầu tiên tôi nghĩ, những gì linebreak, nhưng tôi thấy trong Fx ít nhất có. Tuy nhiên nó là nguy hiểm để dựa vào. Đây là dòng đầu tiên: 'alert ($ (" # element "). Text(). Split (/ \ n /) [1])' [0] th là một chuỗi rỗng ... http: // jsfiddle .net/mplungjan/QquSp/ – mplungjan

+0

không có linebreak – Harry

2

Đây là ý tưởng dành cho bạn. Tất nhiên nếu có yếu tố h4 trước dòng bạn muốn nhận được:

var content = $('#element').html(); 
var arr = content.split('<h4>'); 
console.log(arr[0]); 
+0

no h4 đảm bảo, nó chỉ là một ví dụ – Harry

2
var myElement = $("#element"); 
while(myElement.children().length > 0) 
{ 
    myElement = myElement.children().first(); 
} 
var firstText = myElement.text(); 

Giả sử rằng các văn bản được bọc một cách chính xác bên trong một phần tử, dĩ nhiên rồi. Bạn có thể kiểm tra xem có văn bản trước khi các yếu tố đầu tiên:

/\s*</.test(myElement.html()) 
+0

Không làm việc cho trường hợp đầu tiên tôi tin rằng, nó sẽ phù hợp với Header hơn là blah blah blah (có lẽ đã chọn tốt hơn ví dụ văn bản lol) – Harry

+0

Nếu bạn nhận được

mytext
nó được khá khó khăn. Bạn cần một cái gì đó đệ quy đi du lịch thông qua DOM tôi đoán. Làm thế nào chống đạn hiện nó phải được? –

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