jQuery删除内容为空的元素

时间:2014-08-22 05:27:06

标签: javascript jquery

我想删除没有内容的元素。例如,这是我的HTML标记:

我在jquery变量中有html标记说var myhtml,我不确定其中是否有任何特定的标记。

<h1>
    <u>
        <strong></strong>
    </u>
    <u>
        <strong>Read This Report Now
            <strong></strong> ??
        </strong>
    </u>
</h1>

我们可以看到上面的标记

<u>
    <strong></strong>
</u>

为空,因此应从标记中删除。假设我在变量myhtml中有上述标记。我怎么能这样做?

我不确定该元素是否

"<u>" or "<em>" or "<i>" or "<div>" or "<span>"

..它可以是任何东西。

6 个答案:

答案 0 :(得分:8)

您可以搜索所有元素并删除哪些元素为空。

$('*').each(function(){ // For each element
    if( $(this).text().trim() === '' )
        $(this).remove(); // if it is empty, it removes it
});

看看它是如何运作的!:http://jsfiddle.net/qtvjj3oL/

<强>已更新

您也可以在没有jQuery的情况下执行此操作:

var elements = document.getElementsByTagName("*");

for (var i = 0; i < elements.length; i++) {
    if( elements[i].textContent.trim() === '' )
        elements[i].parentNode.removeChild(elements[i]);
}

参见jsfiddle:http://jsfiddle.net/qtvjj3oL/1/

更新2

根据你的comment,你有变量中的html,你可以这样做:

// the html variable is the string wich contains the html
// We make a fake html
var newHtml = document.createElement('html');
var frag = document.createDocumentFragment();
newHtml.innerHTML = html;
frag.appendChild(newHtml);

var elements = newHtml.getElementsByTagName("*");

// Remove the emptys elements
for (var i = 0; i < elements.length; i++) {
    if( elements[i].textContent.trim() === '' )
        elements[i].parentNode.removeChild(elements[i]);
}

html = newHtml.innerHTML; // now reset html variable

有效:http://jsfiddle.net/qtvjj3oL/6/

答案 1 :(得分:6)

 $("u").each(function () {      // if remove all, you can select all element $("*")           
    var x = $(this).text().trim();
    if (x == "") {
        $(this).remove();
    }
});

如果您想删除所有内容,只需使用 empty 选择器然后将其删除

DEMO

答案 2 :(得分:1)

<强> JQuery的

它搜索所有元素并删除所有空白元素(即:<span></span>),所有包含简单空格的元素(即:<span> </span>)和仅包含&nbsp;的所有元素(即:<span>&nbsp;</span>

$(".mydiv *").each(function() {
    var $this = $(this);
    if($this.html().replace(/\s|&nbsp;/g, '').length == 0)
        $this.remove();
});

DEMO: http://jsfiddle.net/7L4WZ/389/

答案 3 :(得分:1)

简单地:

$( ":empty" ).remove();

$( "u:empty" ).remove();

如果具体

答案 4 :(得分:1)

您可以将.filter()remove()用于此

$('*').filter(function() {
    return $(this).text().trim() == ""
}).remove();

答案 5 :(得分:0)

如果你的html已经在变量myhtml中,那么你将如何做到这一点:

$('*', myhtml).filter(function() {
    return $(this).text() == '';
}).remove();