2011-10-28 115 views
7

我可以很容易地刪除沒有空格的標籤......如何使用空格刪除元素?

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

但是,當有一個空間......

<h2> </h2> 

...這是行不通的。

我試圖

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

也沒有運氣。有人可以幫忙嗎?

回答

-1

試試這個

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

爲什麼要用'filter()'而不是'each()'? – alex

+0

'$ .trim()'不能像那樣工作。 – alex

+0

我的錯誤,但如果你使用jQuery,你可以使用它的跨瀏覽器安全工具。儘管'String.prototype.trim()'現在已經得到很好的支持。 – alex

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的當量,我猜。

+0

'/ \ s +/「」' - 這是關鍵OP。這是一個正則表達式,它將用空白替換空白。 – CamelCamelCamel

+0

如果OP的'h2'元素可能包含後代元素,這將會有問題。 – alex

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)或轉elementsArrayArray.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

0

這將只檢查一個空間,但適用於一個基本的例子:

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

要在Alex的適應,試試這個:

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

看到jsfiddle

+0

這只是我的更*明確的*版本。 Mine依賴於JavaScript中的空字符串* falsy *。雖然明確也有幫助,但它可能更清楚。 – alex

+0

我非常喜歡你的答案。從來不知道我只能做回報! $ .trim($(本)的.text()); – bozdoz