如何使用jQuery检测空div?

时间:2011-09-27 15:57:37

标签: jquery

我无法使用:

$('div:empty')

因为div中可能有空格。如果它没有任何内容或只有空格,我想删除它。

5 个答案:

答案 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();

实例:http://jsfiddle.net/JNZtt/

答案 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...
    }
});