就像其他人已经注意到的那样,您可以像这样在 jQuery 中使用:empty:
$('#cartContent:empty').remove();
如果#cartContent div 为空,它将删除它。
但是人们在这里建议的这种技术和其他技术可能无法满足您的要求,因为如果它有任何包含空格的文本节点,则它不会被视为空。所以这不是空的:
<div> </div>
虽然您可能想将其视为空的。
前段时间我遇到了这个问题,我写了这个小 jQuery 插件 - 只需将它添加到您的代码中:
jQuery.expr[':'].space = function(elem) {
var $elem = jQuery(elem);
return !$elem.children().length && !$elem.text().match(/\S/);
}
现在你可以使用
$('#cartContent:space').remove();
如果 div 为空或仅包含空格,它将删除该 div。当然你不仅可以删除它,还可以做任何你喜欢的事情,比如
$('#cartContent:space').append('<p>It is empty</p>');
你可以像这样使用:not:
$('#cartContent:not(:space)').append('<p>It is not empty</p>');
我完成了这个测试,它可靠地完成了我想要的,你可以将它从插件中取出来作为一个独立的测试使用:
这个适用于 jQuery 对象:
function testEmpty($elem) {
return !$elem.children().length && !$elem.text().match(/\S/);
}
这个适用于 DOM 节点:
function testEmpty(elem) {
var $elem = jQuery(elem);
return !$elem.children().length && !$elem.text().match(/\S/);
}
这比使用.trim 更好,因为上面的代码首先测试被测元素是否有任何子元素,如果有,它会尝试找到第一个非空白字符然后停止,无需读取或变异如果字符串有一个字符不是空格,则返回该字符串。
希望对你有帮助。