如何删除空白元素?

时间:2011-10-28 01:33:38

标签: jquery

我可以轻松删除没有空格的标记......

$('h2:empty').remove();

但是,当有空间时......

<h2> </h2> 

......这不起作用。

我试过

if ($('h2').html() == " "){
    $('h2').remove(); 
}

也没有运气。有人可以帮忙吗?

5 个答案:

答案 0 :(得分:15)

您可以将仅包含空白文本的元素与...匹配

$('h2').filter(function() {
   return ! $.trim($(this).text());
});

要删除这些元素,请在返回的集上调用remove()

jsFiddle


或者,没有jQuery ......

elements.filter(function(element) {
    return ! (element.textContent || element.innerText).replace(/\s+/g, '');
});

如果您的elementsHTMLCollectionNodeList(或者不是Array),请使用Array.filter(elements, fn)或将elements变为ArrayArray.prototype.slice.call(elements)

如果您也不必支持旧浏览器,则可以使用return ! (element.textContent || element.innerText).trim()

要删除这些内容,请循环使用元素并使用thisElement.parentNode.removeChild(thisElement)

jsFiddle


或者,仅使用节点...

var containsWhitespace = function me(node) {
    var childNodes = node.childNodes;

    if (childNodes.length == 0) {
        return true;    
    }

    for (var i = 0, length = childNodes.length; i < length; i++) {
        if (childNodes[i].nodeType == 1) {
            return me(childNodes[i]);
        } else if (childNodes[i].nodeType == 3) {
            return ! childNodes[i].data.replace(/\s+/g, '');   
        }
    }
}

elements.filter(containsWhitespace);

jsFiddle

答案 1 :(得分:1)

我不使用jQuery,但我可以提供直接的JavaScript解决方案:

var elms = document.getElementsByTagName('h2'), l = elms.length, i;
for( i=l-1; i>=0; i--) {
    if( elms[i].innerHTML.replace(/\s+/,"") == "") {
        elms[i].parentNode.removeChild(elms[i]);
    }
}

所以,只要做jQuery等价物,我猜。

答案 2 :(得分:1)

要适应alex's,试试这个:

$('h2').filter(function() {
    return $.trim($(this).text()).length == 0;
}).remove();

请参阅jsfiddle

答案 3 :(得分:0)

这只会检查一个空格,但适用于一个基本示例:

$("h2:contains(' ')").remove()

答案 4 :(得分:0)

试试这个

$("h2").each(function(){
   var self = $(this);
   if ( self.html().trim().length == 0 )
   {
     self.remove();
   }
});