删除jQuery的所有空元素(保留img标签)

问题描述:

我想删除div中的所有空元素,并找到了解决方案,但是,它使用CSS3选择器,我很确定它不是跨浏览器。这里是我工作的FF:删除jQuery的所有空元素(保留img标签)

$("#container *:empty:not(img)").remove(); 

...它使用CSS3选择器和我敢肯定它不是跨浏览器。

这是因为jQuery通过它的Sizzle选择器引擎来处理它; more

如果你想这样做,而无需使用:empty,这是一个相当直接的递归函数(不使用jQuery,以避免在内存中创建大型排列):

function removeEmpties(node) { 
    var child, sibling; 

    for (child = node.lastChild; child; child = sibling) { 
    sibling = child.previousSibling; 
    switch (child.nodeType) { 
     case 1: // Element 
     if (child.nodeName !== "IMG") { // Assumes HTML, not XHTML 
      removeEmpties(child); 
      if (!child.firstChild) { 
      node.removeChild(child); 
      } 
     } 
     break; 
     case 3: // Text 
     if (child.nodeValue === "") { 
      node.removeChild(child); 
     } 
     break; 
    } 
    } 
} 

...或者类似的规定线。如果你想删除只包含空格的文本节点,然后更改

if (child.nodeValue === "") { 

if (child.nodeValue.replace(/\s/g, '') === "") { 

Live Example | Source

您可以使用jQuery的的.text()方法返回的每个元素的文本内容,并写了条件,如if ($(this).text().length() < 1) $(this).remove()}

没有你的HTML的样本,我不能更具体。