我无法使用:
$('div:empty')
因为div中可能有空格。如果它没有任何内容或只有空格,我想删除它。
答案 0 :(得分:11)
这将返回除空格(或.trim
删除的其他字符之外的所有div
元素,例如新行字符除外):
var emptyDivs = $("div").filter(function() {
return $.trim($(this).text()) === "";
});
更新 - 基于评论
如果有问题的任何div
元素具有不包含文本的子元素(例如,img
元素),则上述方法将它们包含在“空”元素集中。要排除它们,您可以使用以下内容:
var emptyDivs = $("div").filter(function() {
return $.trim($(this).text()) === "" && $(this).children().length === 0;
});
答案 1 :(得分:7)
根据@ Xeon06的回答,您可以扩展jQuery的选择器以查找没有内容的所有元素:
$.expr[':'].nocontent = function(obj, index, meta, stack){
// obj - is a current DOM element
// index - the current loop index in stack
// meta - meta data about your selector
// stack - stack of all elements to loop
// Return true to include current element
// Return false to explude current element
return !($.trim($(obj).text()).length) && !($(obj).children().length)
};
您的用法将是:
$('div:nocontent').remove();
答案 2 :(得分:4)
你可以使用这个条件:
if (!$.trim($("div").text()).length && !$("div").children().length)
额外的children
长度检查是为了确保您不将没有文本但其他元素(例如图像)的div视为空。
答案 3 :(得分:1)
if ($.trim($('div').html()) == '') { $("div").remove(); }
答案 4 :(得分:0)
您可以这样做:
$('div:empty').each(function(){
if($.trim($(this).html()).length == 0){
//do what you want here...
}
});