2011-09-11 12 views
7

Mam przykład elementu takiego:coraz pierwszą linię tekstu w elemencie jQuery

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

może również wyglądać tak:

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

Chcę dostać pierwszą linię (definiując linię luźno) (Blah blah blah.) tekstu wewnątrz elementu. Może być zawinięty w element potomny lub po prostu być nagim tekstem. Jak mogę to zrobić? Dzięki.

Odpowiedz

14

użyć metody contents()[docs] aby wszystkie dzieci, w tym węzły tekstowe, odfiltrować dowolny pusty (lub spacje tylko) węzłów, a następnie chwycić pierwszym planie.

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

węzeł tekst:http://jsfiddle.net/Yftnh/

elementem:http://jsfiddle.net/Yftnh/1/

+0

dzięki, choć dla mnie zwraca obiekt, a nie tekst, powinienem po prostu first_line [0]? – Harry

+0

Tak, to daje obiekt jQuery z elementem lub węzłem tekstowym. Jeśli chcesz treści tekstowej, użyj 'first_line.text()'. Jeśli chcesz odciąć wiodące i końcowe białe znaki, wykonaj '$ .trim (first_line.text())'. – user113716

+1

Witam, czy możesz wyjaśnić, dlaczego wrócisz !!? Co jest !!? – Harry

-1

najpierw uzyskać zawartość elementu

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

następnie podzielić tekst na tablicy przy użyciu linii przerwę

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

pierwsza część tablicy jest pierwsza linia elementu

var firstLine = tmp[0]; 
+1

I pierwsza myśl, co LINEBREAK, ale widzę w Fx przynajmniej tam jest. Jednak na tym można polegać. Oto pierwsza linia: 'alert ($ (" # element "). Text(). Split (/ \ n /) [1])' [0] th to pusty ciąg ... http: // jsfiddle .net/mplungjan/QquSp/ – mplungjan

+0

nie ma linebreaka – Harry

2

Oto pomysł dla ciebie. Oczywiście, jeśli nie ma H4 elementem przed linią chcesz uzyskać:

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

no h4 gwarantowane, to tylko przykład – Harry

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

Zakładając, że tekst jest prawidłowo opakowane wewnątrz elementu, oczywiście. Można sprawdzić, czy jest tam tekst przed pierwszym elemencie:

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

Nie działa dla pierwszego przypadku, który uważam, że będzie pasował do nagłówka, a nie do blah blah blah (być może powinien był wybrać lepszy przykładowy tekst lol) – Harry

+0

Jeśli otrzymasz

mytext
, stanie się to dość trudne. Potrzebujesz czegoś rekursywnie podróżującego przez DOM. Jak to musi być kuloodporne? –

Powiązane problemy