2012-04-03 5 views

答えて

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

それはドットと段落の終わりの間に余分なスペース(またはその他の文字)を必要としない。その場合には代わりにcharAt()の正規表現のチェックがより良い選択かもしれ

+0

だけ考え、それがより効率的にだけで正規表現を使用する代わりに、最後の文字をサブストリングするはずの? – Cybrix

+0

right、regexpを使用せずに更新 – fcalderan

+0

恐ろしい解決策+1私はトリムを置くが、それは私です。 – Cybrix

0

お試しください。次 <p>.*?(?<!\.\s*)</p>

これはない:

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

あなたの正規表現はこれです段落がドットで終わっていないと主張する負のlookbehind。

私は\s*を追加して、期間を置いてスペースを確保しました。

0

私はeachの代わりにfilterを使用したい:

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

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

Fiddleを参照してください。

0

JQueryには、これに便利なセレクタがいくつかあります。試してみてください:

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

A working example

+0

複数の文を含む大きな段落があれば、どこでもピリオドを含むものと一致するため、これは機能しません。 F. Calderanの答えは、より大きな段落についてはうまくいく。 – Jerm

関連する問題