使用jQuery删除所有空元素(保留img标记)

时间:2012-12-13 11:45:14

标签: jquery

我正在尝试删除div中的所有空元素并找到一个解决方案但是,它使用CSS3选择器,我很确定它不是跨浏览器。以下是我在FF上的工作:

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

2 个答案:

答案 0 :(得分:1)

  

......它正在使用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

答案 1 :(得分:0)

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

如果没有你的html样本我就不能更具体了。