You can only match elements with white text with ...
$('h2').filter(function() { return ! $.trim($(this).text()); });
To remove these elements, call remove() on the returned set.
jsFiddle .
Alternatively without jQuery ...
elements.filter(function(element) { return ! (element.textContent || element.innerText).replace(/\s+/g, ''); });
If your elements is an HTMLCollection , NodeList (or otherwise not Array ), use Array.filter(elements, fn) or turn elements into Array with Array.prototype.slice.call(elements) .
If you did not need to support older browsers, you can use return ! (element.textContent || element.innerText).trim() return ! (element.textContent || element.innerText).trim() .
To remove them, loop over the elements and use thisElement.parentNode.removeChild(thisElement) .
jsFiddle .
Alternatively, when working only with nodes ...
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 .
alex
source share