删除带有一个或多个空格而没有正则表达式的标记

时间:2015-02-23 16:23:39

标签: jquery

如何在没有正则表达式的情况下删除带有一个或多个空格的标记。 (和jQuery一起使用)

我可以删除此代码中没有空格的标记。但我找不到用一个或多个空格选择标签的方法。

(我已经读过使用正则表达式和文本不是一个好主意。这是正确的吗?如果是这样,我可以找到的所有其他答案都使用正则表达式)

$('#tot').children().each(function() {
	if ($(this).text() == "") {
		$(this).remove();        
	}
});
<div id="tot">
  <p>normal text</p>
  <p> </p>
  <div>  </div>
  <span></span>
  <small></small>
  <p>normal text</p>
</div>

4 个答案:

答案 0 :(得分:1)

您可以使用indexOf检查字符串中是否存在特定字符:

if ($(this).text().indexOf(' ') !== -1)

但是,根据您的完整要求,匹配[a-z0-9]的正则表达式可能是比明确检查您可能不想允许的数千字符更好的解决方案在标签中。

答案 1 :(得分:1)

我建议:

// selecting the element with id="tot",
// finding its child elements,
// filtering that collection:
$('#tot').children().filter(function () {
    // $.trim() removes trailing, and leading, white-space
    // if the removal of that white-space leaves the
    // text of the element equal to an empty-string the
    // the condition evaluates to true, and the current
    // child element is retained in the collection:
    return $.trim($(this).text()) === '';
// removing the retained elements (whose textContent is only
// white-space):
}).remove();

&#13;
&#13;
$('#tot').children().filter(function() {
  return $.trim($(this).text()) === '';
}).remove();
&#13;
* {
  border: 1px solid #000;
  padding: 0.5em;
  border-radius: 1em;
  width: 80%;
  margin: 0 auto;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="tot">
  <p>normal text</p>
  <p>  </p>
  <div>  </div>
  <span>  </span>
  <small>     </small>
  <p>normal text</p>
</div>
&#13;
&#13;
&#13;

虽然这符合删除空元素的要求,以及整个textContent为空白元素的元素;而不是删除包含一个或多个空格字符序列的元素。

参考文献:

答案 2 :(得分:1)

没有理由不为此使用正则表达式,但如果你真的想,你可以使用$.trim代替:

$('#tot').children().each(function() {
    if ($.trim($(this).text()) == "") {
        $(this).remove();        
    }
});

这将删除根本没有文本的元素,或者只删除空格的元素。或等效的正则表达式:

var rexWhitespace = /^\s*$/;
$('#tot').children().each(function() {
    if (rexWhitespace.test($(this).text())) {
        $(this).remove();        
    }
});

如果您想要删除带有空格的元素,只留下没有文字的元素,那么正则表达式可能是您最好的选择:您只需更改早期的*一到+

var rexWhitespace = /^\s+$/;
// Change is here ------^
$('#tot').children().each(function() {
    if (rexWhitespace.test($(this).text())) {
        $(this).remove();        
    }
});

答案 3 :(得分:0)

好吧,如果你不想使用正则表达式,我建议你尝试测试我的功能:

$('#tot').children().each(function() 
{
    var count = 0;
    var content = $(this).text();
    for(i=0; i<content.length; i++) 
    {
        if(content.charAt(i) == "")
        {
            count ++;
        }
        else break;       
    }
    if(count == content.length)
    {
        $(this).remove();
    }
});