2012-04-03 5 views

Antwort

8
$('p').each(function() { 
    var par = $(this), text = par.text(); 
    if (text.charAt(text.length-1) !== '.') { 
     par.remove(); 
    } 
}); 

natürlich erfordert es keine zusätzlichen Leerzeichen (oder andere Zeichen) zwischen dem Punkt und dem Ende des Absatzes: in diesem Fall ein regulärer Ausdruck Prüfung statt charAt() könnte eine bessere Wahl sein

+0

Nur ein Gedanke, sollte es nicht effizienter sein, String nur das letzte Zeichen stattdessen einen regulären Ausdruck zu benutzen? – Cybrix

+0

rechts, aktualisiert ohne regexp – fcalderan

+0

Super Lösung +1 Ich würde eine Trimm, aber das bin ich. – Cybrix

0

die Try folgende:

$('p').each(function(){ 
    if(this.innerHTML[this.innerHTML.length - 1] != '.') 
     $(this).remove(); 
}); 
0

Ihr regulärer Ausdruck ist dies: <p>.*?(?<!\.\s*)</p>

Dies tut ein Negatives Lookbehind, um zu bestätigen, dass der Absatz nicht mit einem Punkt endet.

Ich habe eine \s* hinzugefügt, um Platz nach einer Periode zu ermöglichen.

0

würde ich filter statt each verwenden:

$("p").filter(function() { 
    var text = $(this).text(); 

    return text.charAt(text.length - 1) != "."; 
}).remove(); 

die Fiddle See.

0

JQuery hat einige ziemlich praktische Selektoren dafür. Versuchen:

$('p').each(function(){ 
    $(this + ':not(:contains(.))').remove(); 
}); 

A working example

+0

Nur erkannt, wenn Sie größere Absätze mit mehreren Sätzen haben, würde dies nicht funktionieren, da es mit irgendetwas übereinstimmt, das irgendwo einen Punkt enthält. F. Calderans Antwort funktioniert gut für größere Absätze. – Jerm

Verwandte Themen