在jQuery中,如何删除只有一个空格的元素?

时间:2010-01-23 03:24:53

标签: javascript jquery html tags

在页面上给出以下HTML:

<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>

任何线索?

4 个答案:

答案 0 :(得分:3)

       $('span').each(function(){
               var str = $(this).text().replace(/ /g,'');
               if (str.length < 1){
                   $(this).remove();
               }
          });

答案 1 :(得分:2)

这应该这样做:

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

答案 2 :(得分:0)

我认为你不能匹配任何空格,因为:contains()不能做正则表达式。你可以循环它们,或编写自己的过滤器。

$.extend($.expr[':'], {
    whitespace: function(el) {
        return $(el).text().search(/\s+/);
    }
});

答案 3 :(得分:0)

对于使用咖啡脚本并希望删除带有一个或多个空格的标签的人。

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