2010-01-23 88 views
3

給出一個頁面上的HTML如下:在jQuery中,如何刪除只有一個空白的元素?

<div class='test'> 
<p><span id='id1' class='test1 test2 test3'>test text 1</span></p> 
<p><span id='id2' class='test1 test2'>test text 2</span></p> 
<span class='test2'> </span> 
<p><span id='id3' class='test1'>test text 3</span></p> 
<p><span id='id4' class='test1 test3 test2'>text4</span></p> 
</div> 

我怎樣才能完全刪除使用jQuery 4號線<span class='test2'> </span>

如果有幫助的任何,我能夠通過正則表達式來找到它:

var re = new RegExp("<span[^>]*test2[^>]*> </span[^>]*?>"); 

而且我能夠找到並使用刪除任何節點與類jQuery的:

$("span[class*='test2']").remove(); 

但是這會刪除所有具有「test2」類的節點,這不是我想要的;我只想刪除其中只有一個空格的那個。 $("span[class*='test2']:empty").remove();不起作用,因爲該節點不是空的,並有空白。

我覺得我很親密,但我失去了一些東西;我想結果是:

<div class='test'> 
<p><span id='id1' class='test1 test2 test3'>test text 1</span></p> 
<p><span id='id2' class='test1 test2'>test text 2</span></p> 
<p><span id='id3' class='test1'>test text 3</span></p> 
<p><span id='id4' class='test1 test3 test2'>text4</span></p> 
</div> 

任何線索?

回答

2

這應做到:

$("span[class*='test2']").filter 
       (
        function() { 
         return $(this).text() === " "; 
        } 
       ).remove(); 
+0

那個伎倆!謝謝 – 2010-01-23 04:26:11

+1

這隻會工作,如果只有一個空間... – Reigel 2010-01-23 04:32:08

+0

是的,我只想要一個空間,在標題中澄清。 – 2010-01-23 04:53:08

0

我不認爲你可以匹配任何空格,因爲:contains()不能做正則表達式。你可以循環它們,或者編寫你自己的過濾器。

$.extend($.expr[':'], { 
    whitespace: function(el) { 
     return $(el).text().search(/\s+/); 
    } 
}); 
3
 $('span').each(function(){ 
       var str = $(this).text().replace(/ /g,''); 
       if (str.length < 1){ 
        $(this).remove(); 
       } 
      }); 
+0

這將刪除所有空白並刪除沒有剩餘字符的元素。 – Reigel 2010-01-23 04:35:00

0

對於使用咖啡腳本,並希望與一個或多個空格,刪除標籤的人。

for paragraph in $('p') 
    str = $(paragraph).text().replace(/\s+/,'') 
    if str.length < 1 
     $(paragraph).remove();